Je veux faire un système de soumission sur un site Web. Cela signifie que les utilisateurs peuvent poster leur offre (nombre naturel). Je veux m'assurer que les utilisateurs n'essayent pas de poster des caractères, des nombres décimaux, etc. Je ne veux pas utiliser la fonction is_numérique car une notation hexadécimale est autorisée. Je pensais utiliser Preg_Match pour cela. Mais dans php.net, la documentation de cette fonction est peu et je ne sais pas comment utiliser Preg_Match. P>
Alors, comment dois-je vérifier si une variable est un nombre naturel avec Preg_Match? P>
10 Réponses :
prég_match ('/ ^ [0-9] + $ /', $ var); code> ou
ctype_digit code> p> p>
Y a-t-il une différence entre Preg_Match ('/ ^ [0-9] + $ /', $ var) et ctype_digit ($ var)?
Lire PHP.NET/CTYPE_DIGIT - CTYPE_DIGIT ne fonctionnera que sur les chaînes, pas des entiers. Cela semble étrange, mais si votre date vient de $ _GET ou $ _Post, cela fonctionnera comme prévu comme prévu.
Lire soigneusement B>: / ^ [0-9] + $ / code> Accepte
0 code>. Je vous recommande de devoir utiliser
/ ^ [1-9] [0-9] * $ / code> à la place.
CTYPE_DIGIT fait ce que vous voulez: p >
vérifie si tous les caractères de la chaîne fournie, le texte, sont numériques. P>
(avant PHP 5.1.0, cette fonction est renvoyée true lorsque le texte était une chaîne vide.) p> blockQuote>
ctype_digit (123); // retourne faux, car il s'attend à ce que l'entrée soit une chaîne.
Ce type dépend de votre définition de nombres naturels - selon différentes théories, le nombre zéro ( Pour répondre à votre question sur Comment résoudre ceci avec Si vous souhaitez inclure Zero, à l'aide de Preg_Match est assez facile 0 code>) fait ou ne compte pas comme un nombre naturel.
Preg_Match Code>: P>
Preg_Match ('^ [0-9] + $', $ entrée) code>.
UTILISATION: P> if (preg_match('^[1-9][0-9]*$', $input))
// $input represents a positive numeric value
else
// $input does not represent a positive numeric value
Si vous n'avez pas besoin de points décimaux: ctype_digit code >
ou filtre_var ($ var, filtre_validate_int) code>.
Si vous faites: filtre_var ($ var, filtre_validate_float) code> < / a>. p>
Bien sûr, je viens de souligner que dans ce contexte particulier, le point décimal ne fait pas partie du problème ....
@Deceze filtre_var code> est ok. Vous devez juste ajouter une option pour
min_range code>
Je serais généralement prudent contre l'utilisation de Regex pour analyser les numériques, car il y a généralement de meilleures solutions que celles de la regex pour cela, mais que vous demandez, je vais essayer de vous aider avec cela:
Vous pouvez en savoir plus sur la syntaxe de regex sur des sites tels que http://www.regular-expressions.info/ p> Si vous souhaitez correspondre à un chiffre dans RegEx, vous pouvez utiliser Si vous souhaitez correspondre à une ou plusieurs de n'importe quoi, vous utiliseriez un signe plus. P> enfin , les chaînes de regex doivent être enfermées dans une paire de caractères. Le caractère choisi est généralement un caractère SLASH ( Donc, votre chaîne de regex correspond à n'importe quel nombre de chiffres serait Preg_Match Code> utilise des expressions régulières (regex) pour sa correspondance. p>
[0- 9] code> ou
\ d code>. P>
/ ~ code>) est assez courant. p>
"/ \ d + /" code>. Ceci peut ensuite être mis dans un
Preg_Match Code> Appel comme SO: P>
$isnumeric = preg_match("/^\d+\.\d\d$/",$input_string);
+1 Pour souligner que les regexes ne sont pas toujours la solution - voir aussi codinghorror.com/blog/2008/06/... par notre propre Jeff Atwood
in_array(str_replace(str_split('0123456789'), '', $s), array(',','.',''));
Fonction simple:
Je sais que c'est très vieux mais je voulais partager la solution suivante au cas où quelqu'un d'autre appartient à ce problème.
Je suppose que par numéro naturel, vous vouliez dire integer positif em> ( qui exclut le nombre 0). p>
d'un point de vue mathématique, un nombre naturel est un entier positif, , y compris zéro fort>, vous pouvez donc vérifier comme ceci: p>
is_int ($ enchérit) && $ enchérissez> = 0 code> p>
Le plus simple et plus rapide
if( is_numeric( $key ) && intval( $key ) == $key ) { //key == number }
Les informations principales sur la correspondance d'expression régulière sur php.net ne sont pas directement sur la page de fonction Preg_Match; Suivez le lien PCRE qui apparaît sur le côté gauche de cette page. C'est à dire. Lire le php.net/manual/fr/book.pcre.php pages .