295 votes

Expression régulière simple pour un decimal avec une précision de 2

Ce qui est l’expression régulière pour un nombre décimal avec une précision de 2 ?

Exemples valides:

Exemples non valides :

La virgule peut être facultative et entiers peuvent aussi être inclus.

436voto

DocMax Points 5744

Valide regex jetons de varier en fonction de la mise en œuvre. La plupart des génériques de la forme que je connais serait:

[0-9]+(\.[0-9][0-9]?)?

Le plus compact:

\d+(\.\d{1,2})?

Les deux supposent que vous devez avoir au moins un chiffre avant et un après la virgule.

D'exiger que l'ensemble de la chaîne est un nombre de cette forme, placer l'expression de début et de fin de balises (en Perl):

^\d+(\.\d{1,2})?$

AJOUTÉ: Enveloppé la partie fractionnaire ()? pour la rendre facultative. Être conscient que ce qui exclut les formes telles que des "12." Y compris qui serait plus ^\d+\.?\d{0,2}$.

299voto

dbr Points 66401
^[0-9]+(\.[0-9]{1,2})?$

Et puisque les expressions régulières sont une horreur à lire, beaucoup moins de comprendre, ici, c'est le verbose équivalent:

^                   # Start of string.
[0-9]+              # Must have one or more numbers.
(                   # Begin optional group.
    \.              # The decimal point, . must be escaped, 
                    # or it is treated as "any character".
    [0-9]{1,2}      # One or two numbers.
)?                  # End group, signify it's optional with ?
$                   # End of string.

Vous pouvez remplacer [0-9] avec \d dans la plupart des expression régulière implémentations (y compris les PCRE, le plus commun). J'ai laissé ce qu' [0-9] que je pense que c'est plus facile à lire.

Aussi, voici le simple script Python que j'ai utilisé pour le vérifier:

import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")

valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]

assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0

19voto

Karol Bienkowski Points 121

Inclure un signe moins facultatif et ne pas autoriser de nombres comme `` (qui peut être confondu avec nombres octaux) écrire :

14voto

Jimmy Points 1197

Pour les numéros qui n’ont pas un milliers séparateur, j’aime cette expression régulière simple et compact :

ou, pour ne pas être limité à une précision de 2 :

Les matches de ce dernier
1
100

  1. 100.74
    100.7
    0,7
    .7
    .72

Et il ne correspond pas à une chaîne vide (comme \d. ? \d serait)

5voto

Pragna Points 2599

Essayez ceci

Il permettra aussi des signes positifs et négatifs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X