web-dev-qa-db-fra.com

Valeurs décimales ou numériques dans la validation des expressions régulières

J'essaie d'utiliser une validation d'expression régulière pour vérifier uniquement les valeurs décimales ou les valeurs numériques. Mais l'utilisateur entre une valeur numérique, il ne doit pas s'agir du premier chiffre "0"

Comment je fais ça?

48
ilkdrl

Un chiffre compris entre 1 et 9 suivi de zéro ou de plusieurs autres chiffres:

^[1-9]\d*$

Autoriser les nombres avec un point décimal optionnel suivi de chiffres. Un chiffre compris entre 1 et 9 suivi de zéro ou de plusieurs autres chiffres, suivi éventuellement d'un point décimal suivi d'au moins 1 chiffre:

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

Remarques:

  • Les ancres ^ et $ au début et à la fin, indiquant essentiellement que la chaîne entière doit correspondre au modèle

  • ()? fait correspondre 0 ou 1 de l'ensemble entre parenthèses

Mise à jour pour gérer les virgules:

Dans les expressions régulières, . a une signification particulière - faites correspondre n'importe quel caractère. Pour faire correspondre littéralement un . dans une chaîne, vous devez échapper le . à l'aide de \.. Ceci est la signification du \. dans l'expression rationnelle ci-dessus. Donc si vous voulez utiliser une virgule, le modèle est simplement:

^[1-9]\d*(,\d+)?$

Nouvelle mise à jour pour gérer les virgules et les points.

Si vous voulez autoriser un. entre groupes de chiffres et a, entre l'intégrale et les fractions, puis essayez:

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

c’est-à-dire qu’il s’agit d’un chiffre compris entre 1 et 9, suivi de 2 autres chiffres au maximum, de zéro ou de plusieurs groupes d’arrêt complet, suivi de 3 chiffres, suivi éventuellement d’une virgule et de chiffres comme précédemment.

Si vous voulez autoriser un. n'importe où entre les chiffres puis essayez:

^[1-9][\.\d]*(,\d+)?$

c'est-à-dire un chiffre de 1 à 9 suivi de zéro ou de plusieurs chiffres ou d'un point complet suivi éventuellement d'une virgule et d'un ou de plusieurs chiffres.

111
mikej

J'ai eu le même problème, mais je voulais aussi que ".25" soit un nombre décimal valide. Voici ma solution en utilisant JavaScript:

function isNumber(v) {
  // [0-9]* Zero or more digits between 0 and 9  (This allows .25 to be considered valid.)
  // ()? Matches 0 or 1 things in the parentheses.  (Allows for an optional decimal point)
  // Decimal point escaped with \.
  // If a decimal point does exist, it must be followed by 1 or more digits [0-9]
  // \d and [0-9] are equivalent 
  // ^ and $ anchor the endpoints so tthe whole string must match.
  return v.trim().length > 0 && v.trim().match(/^[0-9]*(\.[0-9]+)?$/);
}

Où ma méthode trim () est

String.prototype.trim = function() {
  return this.replace(/(^\s*|\s*$)/g, "");
};

Matthew DesVoigne

7
Matt DesVoigne

J'ai testé toutes les expressions rationnelles données mais malheureusement aucune d'entre elles n'a réussi ces tests

    String []goodNums={"3","-3","0","0.0","1.0","0.1"};
    String []badNums={"001","-00.2",".3","3.","a",""," ","-"," -1","--1","-.1","-0", "2..3", "2-", "2...3", "2.4.3", "5-6-7"};

Voici le meilleur que j'ai écrit qui passe tous ces tests:

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

enter image description here

6
Nikita Kurtin

Voici un grand regex de travail pour les nombres. Ceci accepte un nombre avec des virgules et des décimales. 

/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/
2
zeros-and-ones

Essayez ce code, espérons qu'il vous aidera

String regex = "(\\d+)(\\.)?(\\d+)?";  for integer and decimal like 232 232.12 
1
biswajit bastia

/([0-9]+[.,]*)+/ correspond à n'importe quel numéro avec ou sans coma ou points

ça peut correspondre

         122
         122,354
         122.88
         112,262,123.7678

bug: il correspond aussi à 262.4377.3883 (mais peu importe)

1
Satheesh Kumar

Voici mon regex pour valider les nombres:

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

Numéros valides:

String []validNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};

Nombre invalide:

String []invalidNumbers={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};
1
Marina K.

si vous avez besoin de valider un nombre décimal avec des points, des virgules, des points positifs et des points négatifs, essayez ceci:

Object testObject = "-1.5";
boolean isDecimal = Pattern.matches("^[\\+\\-]{0,1}[0-9]+[\\.\\,]{1}[0-9]+$", (CharSequence) testObject);

Bonne chance.

0
august0490

Voici le parfait pour l'exigence mentionnée:

^[0-9]{1,3}(,[0-9]{3})*(([\\.,]{1}[0-9]*)|())$
0
Snehal Masne