8
votes

Vérifiez si une variable est un nombre naturel

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.

Alors, comment dois-je vérifier si une variable est un nombre naturel avec Preg_Match?


1 commentaires

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 .


10 Réponses :


1
votes

prég_match ('/ ^ [0-9] + $ /', $ var); ou ctype_digit


3 commentaires

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 : / ^ [0-9] + $ / Accepte 0 . Je vous recommande de devoir utiliser / ^ [1-9] [0-9] * $ / à la place.



5
votes

CTYPE_DIGIT fait ce que vous voulez:

vérifie si tous les caractères de la chaîne fournie, le texte, sont numériques.

(avant PHP 5.1.0, cette fonction est renvoyée true lorsque le texte était une chaîne vide.)


1 commentaires

ctype_digit (123); // retourne faux, car il s'attend à ce que l'entrée soit une chaîne.



0
votes

Ce type dépend de votre définition de nombres naturels - selon différentes théories, le nombre zéro ( 0 code>) fait ou ne compte pas comme un nombre naturel.

Pour répondre à votre question sur Comment résoudre ceci avec Preg_Match Code>: P>

Si vous souhaitez inclure Zero, à l'aide de Preg_Match est assez facile 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


0 commentaires


1
votes

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:

Preg_Match Code> utilise des expressions régulières (regex) pour sa correspondance. p>

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 [0- 9] code> ou \ d code>. P>

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 ( / ~ code>) est assez courant. p>

Donc, votre chaîne de regex correspond à n'importe quel nombre de chiffres serait "/ \ 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 commentaires

+1 Pour souligner que les regexes ne sont pas toujours la solution - voir aussi codinghorror.com/blog/2008/06/... par notre propre Jeff Atwood



0
votes
in_array(str_replace(str_split('0123456789'), '', $s), array(',','.',''));

0 commentaires

0
votes

Fonction simple: xxx


0 commentaires

1
votes

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 ( qui exclut le nombre 0). xxx


0 commentaires

0
votes

d'un point de vue mathématique, un nombre naturel est un entier positif, , y compris zéro , vous pouvez donc vérifier comme ceci:

is_int ($ enchérit) && $ enchérissez> = 0


0 commentaires

0
votes

Le plus simple et plus rapide

                if( is_numeric( $key ) &&  intval( $key ) == $key )
                 {
                      //key == number
                 }


0 commentaires