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.

user39221
la source
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.

DocMax
la source
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
dbr
la source
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+)?
Karol Bienkowski
la source
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)

Jimmy
la source
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

utilisateur regex frustré
la source
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.

BSharper
la source
5

Essaye ça

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

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

Android
la source
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 => "

Vivien Pipo
la source
2
preg_match("/^-?\d+[\.]?\d\d$/", $sum)
DEC32
la source
2

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

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

SK9
la source
1

Ne vous devez prendre een e666.76compte?

Avec

(e|0-9)\d*\d.\d{1,2)
spacemonkeys
la source
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'));
ACIER
la source
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.

Shady Sherif
la source
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}$/
Premanshu
la source
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.

rajesh_kw
la source
0

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

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

Démo

Nambi_0915
la source
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... :)

Bhanu Pratap
la source