J'ai récemment découvert qu'une méthode que j'utilise pour la validation de la saisie de l'utilisateur accepte certaines valeurs que je ne suis pas particulièrement satisfaite. J'en ai besoin pour accepter uniquement les nombres naturels ( Ma méthode On dirait que ceci: p> il est donc censé renvoyer false s'il trouve autre chose mais tout un nombre naturel. Le problème est que cela accepte les chaînes telles que 1 code>,
2 code>,
3 code>, etc.) sans caractères non chiffres.
"2.3" code> et même
"2.3,2,2" code> p> p> p> p> p> P> P>
4 Réponses :
Peut-être que vous pouvez préciser la différence entre un "nombre" et un "chiffre" ??
de toute façon, vous pouvez utiliser P> ou vous pouvez utiliser p>
Je pense que j'ai mal compris les chiffres. Il doit accepter des chiffres seulement. On dirait que Ctype_Digit n'accepte que des chiffres sous forme de chaîne, j'en ai besoin pour accepter les entiers.
Oui, ctype_digit () fonctionnera, cependant, notez comment je dépose $ STR en tant que chaîne d'abord, car ctype_digit () retournera toujours false si vous y passez un entier.
ctype_digit () retourne toujours true sur les cordes comme "2.2,2.3 '
Si ctype_digit () renvoie true pour "2.2,2.3", c'est un bug PHP qui devrait être soulevé sur des bugs.php.net, mais je ne peux pas reproduire ce défaut
Lire soigneusement B>: / ^ [0-9] + $ / code> Accepte
0 code>. Je vous recommande de devoir utiliser
/ ^ [1-9] [0-9] * $ / code> à la place.
@ K._ règle de côté le fait que vous commenciez sur un post de 5 ans et plus. Je ne suis pas sûr de ce que vous obtenez .. Vous suggère que 0 code> n'est pas un nombre ?
@Crayonviolent Peu importe quel âge a le poteau, car Google peut mener quelqu'un (comme moi) à ce poste. Umm, de toute façon. Ce que je veux dire, c'est le fait que le questionneur cherchait une expression régulière pour un numéro Natural B> (ℕ). Veuillez lire ce message: est 0 un nombre naturel?
@ K._ ok bien assez juste du temps passé, mais j'ai lu la post - et les commentaires suivants dans divers endroits, sur ce que l'op vraiment i> voulait. As-tu? Il ressort clairement de la question et des commentaires suivants que OP ne comprenait pas ce qu'il voulait réellement.
@CRAYONVIOLENT Voir, 'J'en ai besoin pour accepter uniquement Natural B> numéros ( 1, 2, 3, etc. b>) sans caractères non chiffres.'; C'est ce que dit le questionneur sur le post et le titre. Si vous pensez que ce n'est pas ce que le questionneur vraiment i> voulait, alors pourquoi ne le faites-vous pas éditer le poste? Les commentaires dans le débordement de la pile ne sont pas seulement i> pour vous, ni le questionneur. Avez-vous considéré quelqu'un qui lira ce post?
@ K._, puis la partie suivante de cette question était "sans caractères non chiffres" qui n'a aucun sens. Et cela ne compte toujours pas les commentaires de suivi. Regardez homme, je conviendrai que les choses pourraient être éditées / consolidées pour s'adapter à la manière dont les choses se sont effectivement descendues avec ce fil, mais à nouveau, vous êtes nickle et vous dressez une question aléatoire qui s'est passée il y a longtemps, et que vous avez holling à quelqu'un qui n'a pas 't'ai vraiment quelque chose à voir avec faire en sorte que les choses soient éditées. Obtenir une certaine perspective. J'ai fini avec cette conversation. GL HF
Le problème avec Si vous devez également inclure zéro utiliser cette regex à la place: / ^ [0-9] + $ / code> est-ce qu'il accepte également des valeurs telles que
0123 code>.
L'expression régulière correcte est
/ ^ [1-9] [0-9] * $ / code>. P>
ctype_digit () code> souffre le même problème. p>
/ ^ (?: 0 | [1-9] [0-9] *) $ / code> p> p> P>
Il n'y a rien de particulièrement préjudiciable à l'acceptation de 0123. Cela dépend de ce qu'il attend dans l'ensemble, ce qu'il a l'intention de faire avec elle ... mais par exemple, 0123 évaluera comme étant 123 dans les calculs, etc. ...
Un "nombre naturel" est chaque chiffre ordinaire de 1 (ℕ). C'est pourquoi je pense que "0123" n'est pas valide.
Vrai, mais comme l'OP a souligné, il était confus sur les définitions. Encore une fois, il se résume à ce qu'il veut vraiment l'utiliser ..
Les zéros de pointe gauche du point décimal ne sont pas plus importants que la droite du point décimal de Zeros.
@Tchrist, ils sont importants dans les cas où l'analyseur numérique tente d'autodétect octal. Cela signifie 03 code> = 3,
11 code> = 11, mais
011 code> = 9.
J'ai eu un problème avec ctype_digit lorsque les numéros de facturation comme "000000196" devaient passer via ctype_digit.
J'ai donc utilisé un: p>
Cette question est devenue de sept ans et elle a déjà une réponse acceptée et de sept ans. De plus, le modèle que vous utilisez a déjà été suggéré par d'autres utilisateurs.
Que voulez-vous dire "nombre naturel mais pas de chiffres"? Comment voulez-vous les chiffres sans chiffre ?
Cette regex ne correspond pas à un point ou une virgule.
J'utilise
filtre_var code>: Stackoverflow.com/a/6563394/2165415 Voir le post là-bas
Dupliqué possible de Vérifiez si une variable est un nombre naturel