Expression régulière simple pour une décimale avec une précision de 2


271

Quelle est l'expression régulière d'une décimale avec une précision de 2?

Exemples valides :

123.12
2
56754
92929292929292.12
0.21
3.1

Exemples non valides:

12.1232
2.23332
e666.76

Le point décimal peut être facultatif et des nombres entiers peuvent également être inclus.


1
En relation: pour la décimale avec le millième séparateur, voir stackoverflow.com/questions/16148034/…
Yeo

1
La meilleure réponse est ici: stackoverflow.com/a/39399503/715269
Gangnus

Réponses:


398

Les jetons d'expression régulière valides varient selon l'implémentation. Un formulaire générique est:

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

Plus compact:

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

Les deux supposent que les deux ont au moins un chiffre avant et un après la décimale.

Pour exiger que la chaîne entière soit un nombre de ce formulaire, encapsulez l'expression dans des balises de début et de fin telles que (sous la forme de Perl):

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

Pour faire correspondre les nombres sans premier chiffre avant les nombres décimaux ( .12) et entiers ayant une période de fin ( 12.) tout en excluant la saisie d'une seule période ( .), essayez ce qui suit:

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

Ajoutée

Enveloppé la portion fractionnée ()?pour la rendre facultative. Sachez que cela exclut des formes telles que l' 12. inclusion qui ressemblerait davantage ^\d+\\.?\d{0,2}$.

Ajoutée

Permet ^\d{1,6}(\.\d{1,2})?$d'arrêter la répétition et de restreindre une partie entière de la valeur décimale.


4
Mathématiquement, je pense qu'un nombre de précision 2 devrait toujours avoir deux décimales même si le dernier est zéro. Cela est basé sur mon expérience avec des chiffres significatifs, donc cela pourrait être faux, mais vous ne savez pas vraiment si 1,7 est 1,70 ou un nombre compris entre 1,70 et 1,74.
paxdiablo

Merci! Était exactement ce dont j'avais besoin :) +1
alex

6
cela correspond à 0001.00: /
redben

2
Ajoutée '-?' dans ce ^ \ d + (\. \ d {1,2})? $ ===> ^ -? \ d + (\. \ d {1,2})? $ pour soutenir -ve
Murali Murugesan

1
@BimalDas, vous pouvez prendre en charge les négatifs en préfixant l'expression avec -?, comme dans -?\d+(\.\d{1,2})?. Je n'ai pas inclus de négatifs ou en commençant par un point décimal car ceux-ci n'étaient pas dans la question du PO, bien qu'ils soient certainement valables pour un format numérique plus générique. Le fil des commentaires donne ici quelques façons de gérer ".21".
DocMax

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

Et comme les expressions régulières sont horribles à lire, et encore moins comprises, voici l'équivalent détaillé:

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

Vous pouvez le remplacer [0-9]par \ddans la plupart des implémentations d'expressions régulières (y compris PCRE , la plus courante). Je l'ai laissé [0-9]car je pense que c'est plus facile à lire.

En outre, voici le script Python simple 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

Je veux max 3 chiffres avant la décimale, essayé comme ça sans succès ^ ([0-9] {0,3}) + (\. [0-9] {1,2})? $
Raghurocks

3
@Raghurocks Supprimer le +après la première paren de fermeture,^([0-9]{0,3})(\.[0-9]{1,2})?$
dbr

Pour les utilisateurs Java: la décimale ne doit pas être échappée.

3
@Gracchus Êtes-vous sûr? Il devrait probablement être à la \\.place de \.car .il semblerait que cela fonctionne, mais correspond à n'importe quel caractère (pas seulement la décimale). Par exemple, les deux 1z23et 1.23peuvent être considérés comme valides si vous n'y échappez pas
dbr

@dbr C'est peut-être ce que cela devrait être. Java vient de se plaindre d'une fuite incorrecte. Suppression de ce "fixe" (fermez-le), lol. Je n'ai pas encore eu l'occasion de le tester complètement.

20

Pour inclure un signe moins facultatif et pour interdire des nombres comme 015(qui peuvent être confondus avec des nombres octaux), écrivez:

-?(0|([1-9]\d*))(\.\d+)?

Cela permet à alpha avant la décimale pour moi. Permet X.25
BengalTigger

1
Cela ne limite pas le nombre de décimales à 2.
Dawood ibn Kareem

13

Pour les nombres qui n'ont pas de séparateur de milliers, j'aime cette expression régulière simple et compacte:

\d+(\.\d{2})?|\.\d{2}

ou, pour ne pas se limiter à une précision de 2:

\d+(\.\d*)?|\.\d+

Ce dernier correspond à
1
100
100.
100,74
100,7
0,7
0,7
0,72

Et il ne correspond pas à une chaîne vide (comme \ d *.? \ D * le ferait)


7

J'utilise celui-ci pour jusqu'à deux décimales:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) passe:
.25
0,25
10,25
+0,25

ne passe pas:
-.25
01,25
1.
1,256


Cela transmet également une valeur vide.
BengalTigger

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

Fera des choses comme 12.acceptées. Ce n'est pas ce qui est communément accepté, mais si vous devez être «flexible», c'est une façon de procéder. Et bien sûr, [0-9]peut être remplacé par \d, mais je suppose que c'est plus lisible de cette façon.


5

Essaye ça

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

Cela permettra également des signes positifs et négatifs.


3

La réponse principale est FAUX car elle valide 5.ou 5,saisit

ce code le gère (mais dans mon exemple les nombres négatifs sont interdits):

/^[0-9]+([.,][0-9]{1,2})?$/;

les résultats sont ci-dessous:

true => "0" / true => "0.00" / true => "0.0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1.11" / true => "1,11" / false => "-5" / false => "-0.00" / true => "101" / false => "0.00.0" / true => "0.000" / true => "000.25" / false => ".25" / true => "100.01" / true => "100.2" / true => "00" / false => "5." / false => "6" / true => "82" / true => "81,3" / true => "



2

En général, c'est-à-dire nombre de décimales illimité:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$.


1

Ne vous devez prendre een e666.76compte?

Avec

(e|0-9)\d*\d.\d{1,2)

Non, ce serait hors de portée du projet! merci cependant, c'est pratique :)
user39221

1

en ajoutant ma réponse aussi, quelqu'un pourrait la trouver utile ou peut-être aussi la mienne.

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));

1

Cela a fonctionné avec moi:

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

Le groupe 1 est votre nombre flottant et le groupe 2 est la fraction uniquement.


1

J'en ai essayé un avec mon projet. Cela permet également aux numéros avec des + | -signes.

/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/

0

Chrome 56 n'accepte pas ce type de modèles (Chrome 56 accepte 11.11. Un supplémentaire.) Avec le numéro de type, utilisez type comme texte comme progression.


0

Cela permettra décimal avec exponentiation et jusqu'à 2 chiffres,

^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$

Démo


Cela ne correspond pas à l'entier ni1.2e-10
Toto

Ouais, merci pour ta correction. Je pensais que
c'était

([0-9]+)?est mieux écrit \d*. Maintenant ça ne correspond plus 10e3. Et OP veut faire correspondre jusqu'à 2 chiffres.
Toto

-1
 function DecimalNumberValidation() {
        var amounttext = ;
            if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
            alert('Please enter only numbers into amount textbox.')
            }
            else
            {
            alert('Right Number');
            }
    }

La fonction validera n'importe quel nombre décimal. Le numéro météorologique a des décimales ou non, il dira "Numéro correct" autrement "Veuillez entrer uniquement les nombres dans la zone de texte du montant." un message d'alerte apparaîtra.

Merci... :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.