J'ai besoin d'une expression régulière qui valide un nombre, mais ne nécessite pas de chiffre après la virgule. c'est à dire.
123
123.
123.4
serait tout valide
123..
serait invalide
Tout serait grandement apprécié!
Utilisez le suivant:
/^\d*\.?\d*$/
^
- Début de la ligne;\d*
- 0 chiffre ou plus;\.?
- Un point facultatif (échappé, car dans une expression rationnelle, .
est un caractère spécial);\d*
- 0 ou plusieurs chiffres (la partie décimale);$
- Fin de la ligne.Cela permet d’utiliser une valeur décimale de 0,5 plutôt que d’exiger le zéro initial, tel que 0,5.
/\d+\.?\d*/
Un ou plusieurs chiffres (\d+
), période facultative (\.?
), zéro ou plusieurs chiffres (\d*
).
En fonction de votre utilisation ou de votre moteur regex, vous devrez peut-être ajouter des ancres de ligne de début/fin:
/^\d+\.?\d*$/
Vous avez besoin d'une expression régulière comme celle-ci pour le faire correctement:
/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/
La même expression avec des espaces, en utilisant le modificateur étendu (comme supporté par Perl):
/^ [+-]? ( (\d+ (\.\d*)?) | (\.\d+) ) $/x
ou avec des commentaires:
/^ # Beginning of string
[+-]? # Optional plus or minus character
( # Followed by either:
( # Start of first option
\d+ # One or more digits
(\.\d*)? # Optionally followed by: one decimal point and zero or more digits
) # End of first option
| # or
(\.\d+) # One decimal point followed by one or more digits
) # End of grouping of the OR options
$ # End of string (i.e. no extra characters remaining)
/x # Extended modifier (allows whitespace & comments in regular expression)
Par exemple, cela correspondra à:
Et rejettera ces non-nombres:
Les solutions plus simples peuvent rejeter de manière incorrecte des nombres valides ou faire correspondre ces non-nombres.
Essayez cette regex:
\d+\.?\d*
\ d + chiffres avant décimal optionnel
.? décimal optionnel (facultatif en raison du? quantificateur)
\d * chiffres facultatifs après le signe décimal
J'ai fini par utiliser ce qui suit:
^\d*\.?\d+$
Cela rend invalide ce qui suit:
.
3.
Je pense que c'est le meilleur (correspond à toutes les exigences): ^\d + (\.\D +)? $
Quelle langue? Dans le style Perl: ^\d+(\.\d*)?$
C'est ce que j'ai fait. C'est plus strict que tout ce qui précède (et plus correct que certains):
^0$|^[1-9]\d*$|^\.\d+$|^0\.\d*$|^[1-9]\d*\.\d*$
Cordes qui passe:
0
0.
1
123
123.
123.4
.0
.0123
.123
0.123
1.234
12.34
Des chaînes qui échouent:
.
00000
01
.0.
..
00.123
02.134
^\d+(()|(\.\d+)?)$
Entré avec ça. Autorise les nombres entiers et décimaux, mais force une décimale complète (nombres de début et de fin) si vous décidez d'entrer une décimale.
vous pouvez utiliser ceci:
^\d+(\.\d)?\d*$
allumettes:
11
11.1
0,2
ne correspond pas:
. 2
2.
2.6.9
(?<![^d])\d+(?:\.\d+)?(?![^d])
propre et simple.
Ceci utilise les fonctions Suffix et Prefix, RegEx.
Il renvoie directement true - false pour la condition IsMatch
En Perl, utilisez Regexp :: Common qui vous permettra d’assembler une expression régulière précisément adaptée à votre format numérique. Si vous n'utilisez pas Perl, l'expression régulière générée peut toujours être utilisée par d'autres langues.
Imprimer le résultat de la génération des exemples d'expressions régulières dans Regexp :: Common :: Number:
$ Perl -MRegexp::Common=number -E 'say $RE{num}{int}'
(?:(?:[-+]?)(?:[0123456789]+))
$ Perl -MRegexp::Common=number -E 'say $RE{num}{real}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[-+]?)(?:[0123456789]+))|))
$ Perl -MRegexp::Common=number -E 'say $RE{num}{real}{-base=>16}'
(?:(?i)(?:[-+]?)(?:(?=[.]?[0123456789ABCDEF])(?:[0123456789ABCDEF]*)(?:(?:[.])(?:[0123456789ABCDEF]{0,}))?)(?:(?:[G])(?:(?:[-+]?)(?:[0123456789ABCDEF]+))|))
Vous avez déjà répondu à ce que vous avez demandé. Il ne s'agit donc que d'une information supplémentaire pour ceux qui ne veulent que deux chiffres décimaux si la virgule décimale facultative est entrée:
^\d+(\.\d{2})?$
^: début de la chaîne
\d: un chiffre (égal à [0-9])
+: une et plusieurs fois
Groupe de capture (.\D {2})?
? : zéro et une fois. : personnage .
\d: un chiffre (égal à [0-9])
{2}: exactement 2 fois
$: fin de la chaîne
1: match
123: match
123.00: match
123. : aucune concordance
123 ..: pas de correspondance
123.0: pas de correspondance
123.000: pas de correspondance
123.00.00: pas de correspondance