Vous avez besoin d'une expression régulière comme la suivante pour le faire correctement :
/^[+-]?((\d+(\.\d*)?)|(\.\d+))$/
La même expression avec des espaces, en utilisant le modificateur étendu (tel que 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, il correspondra :
- 123
- 23.45
- 34.
- .45
- -123
- -273.15
- -42.
- -.45
- +516
- +9.8
- +2.
- +.5
Et rejettera ces non-nombres :
- . (point décimal unique)
- -. (point décimal négatif)
- +. (plus le point décimal)
- (chaîne vide)
Les solutions les plus simples peuvent rejeter à tort des numéros valides ou faire correspondre ces non-numéros.
0 votes
La meilleure réponse est ici : stackoverflow.com/a/39399503/715269