L'expression rationnelle qui correspond à des nombres positifs
J'ai besoin d'écrire une regex pour permettre uniquement un nombre positif ( entiers ou des nombres décimaux). J'ai trouvé ceci:
/^(?!(?:0|0\.0|0\.00)$)[+]?\d+(\.\d|\.\d[0-9])?$/
mais il accepte jusqu'à 2 décimales. Quels sont les changements que j'ai à faire, de sorte qu'il peut accepter n'importe quel nombre de chiffres après la virgule?
Aussi où puis-je trouver un bon tutoriel pour l'apprentissage de la regex.
Merci d'avance
Est
La base de cas de test doivent minimalement être +2, 2, -2, 2., .2, 2.2, -2.2, +2.2 — puis à nouveau avec tous les deux tournés vers des zéros. La réponse vous l'avez accepté échoue sur certains de ceux-ci. Vous devriez également ajouter 6e23, 6e-23, et 0e23 à vos cas de test. Et nous n'avons pas considéré -1, ce qui est un cas intéressant.
double possible de l'Apprentissage des Expressions Régulières
Ce n'est vraiment pas le genre de chose que vous devriez faire avec regexes. Comme les différents compliqué réponses (et de leurs erreurs) illustrent. Pensez à l'extérieur de la boîte. Look pour une approche alternative.
04
un nombre positif? Note que c'est pas 04
; les points de code différents. De même, est ¼
un nombre positif? Qu'en est 3⁴
? Je crois que vous trouverez que 0⁴
n'est pas un nombre positif, encore 4⁰
est en réalité. Comment vous sentez-vous à propos de Ⅷ
, ou ⅽ̄
en lieu et place de ↈ
? N'est-ce pas π
un nombre positif? Saviez-vous que ⑮
est un nombre positif, mais que ⓯
est un nombre négatif? Avez-vous considéré comme"`?La base de cas de test doivent minimalement être +2, 2, -2, 2., .2, 2.2, -2.2, +2.2 — puis à nouveau avec tous les deux tournés vers des zéros. La réponse vous l'avez accepté échoue sur certains de ceux-ci. Vous devriez également ajouter 6e23, 6e-23, et 0e23 à vos cas de test. Et nous n'avons pas considéré -1, ce qui est un cas intéressant.
double possible de l'Apprentissage des Expressions Régulières
Ce n'est vraiment pas le genre de chose que vous devriez faire avec regexes. Comme les différents compliqué réponses (et de leurs erreurs) illustrent. Pensez à l'extérieur de la boîte. Look pour une approche alternative.
OriginalL'auteur eddy | 2010-12-16
Vous devez vous connecter pour publier un commentaire.
Ce serait ma façon:
^[+]?\d+([.]\d+)?$
EDIT: Si vous souhaitez autoriser quelque chose comme
.23
, vous pouvez utiliser^[+]?([.]\d+|\d+([.]\d+)?)$
EDIT: tchrist insiste sur ce point: le fait de permettre
4.
, vous pouvez utiliser^[+]?([.]\d+|\d+[.]?\d*)$
Explication:
Remarque: Ce ne sera pas accepter un nombre négatif, ce qui est ce que vous voulez finalement.
Si vous ne voulez pas accepter un nombre qui se traduit par pure 0?
Échoue sur
.23
, vous savez.non, il n'est pas, le
\d+
force d'au moins un chiffre avant la virgule.C'est précisément pourquoi il ne parvient pas: parce que
".23"
est parfaitement valide nombre positif, mais votre patron, à tort, la rejette.OriginalL'auteur BeemerGuy
La réponse courte est que vous avez besoin de ce modèle:
La réponse est contenue dans le programme suivant:
Les résultats du test sont:
"OR nothing"
alternative au lieu de juste faire tout ça en option avec un?
c'est à dire Pourquoi(?:foo|)
vs(?:foo)?
?Je n'ai plus de rappel, mais il était probablement parce que mappé à la façon dont je pensais à l'époque. Certes, il ne fait aucune différence quel façon dont il est écrit.
OriginalL'auteur tchrist
Cela devrait le faire.
Il y a des tonnes d'expression régulière tutoriels, voici l'un d'eux:
http://www.cs.tut.fi/~jkorpela/perl/regexp.html
.14159
, vous savez.Bonne prise tchrist, je l'ai mis dans un correctif pour que. Il semble que ce devrait être plus simple, mais la seule façon que je pouvais faire, c'était d'ajouter un deuxième cas
Qui échoue sur
100.
, vous savez. 🙁il devient de plus en plus compliqué 🙂 mais la nouvelle expression doit gérer cela. Semble que ce devrait être plus simple à première vue.
ces choses sont toujours plus difficile que ce qu'ils paraissent. Regarde mon cas de test.
OriginalL'auteur killdash9
Ce phénomène est simple —
/\d*(\.d*)?/g
Mise à jour: celui-ci ne correspond pas à des chaînes vides —
/(\.)?\d+(\.\d*)?/g
Testé sur "-1.5 0 12. -123.4. 15 -2. .4"
mon mauvais, correction de la réponse
OriginalL'auteur Alex Shevchenko