2010-08-24 5 views
0

S'il vous plaît aidez-moi à faire une expression régulière avec la règle suivante -Expression régulière pour le nombre

  1. Nombre maximum peut être 9999,99
  2. devrait être non négatif
  3. Ne peut pas être 0, mais 0,01 et ainsi est valide sur
  4. Alors, je besoin d'un nombre non négatif entre 0.01-9999.99

Répondre

3

Erm, ce n'est pas vraiment un emploi pour Regexp, mais il fonctionne avec toute façon:

/(\d{2,4}(\.(\d[1-9])|([1-9]\d))?)|[1-9]/ 

Une évaluation plus stricte serait:

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

Avec ne pas accepter zéro de, mais en tenant compte d'un seul décimal: "0.1". Gardez à l'esprit que les décimales sont facultatives.

Je suggère cependant d'utiliser des opérations mathématiques: Convertir flotter puis vérifiez:

if((num > 0) && (num < 100000)) {...} 

Vous pouvez utiliser sprintf() pour obtenir la représentation que vous avez besoin, par exemple en limitant le nombre de décimales, etc.

+0

+1 pour faire de la période et une partie décimale en option - l'OP n'a pas précisé, mais sans cela, une entrée comme « 100 » échouerait. +1 pour dire Regex est le mauvais outil pour analyser les nombres! – Val

+0

Salut, Merci pour votre réponse. J'ai besoin d'une expression régulière car le nombre devrait avoir deux chiffres maximum après la virgule. Donc, 9.9999 est invalide bien qu'il soit entre 0-10000 – Saurabh

+0

Aussi, l'expression que vous avez donnée ne fonctionne pas comme prévu. – Saurabh

2

Pourquoi avez-vous besoin d'une expression régulière pour le faire? Il suffit de convertir votre chaîne en double et vérifiez si elle est comprise entre 0,01 et 9999,99.

0

Comme les gens ont déjà répondu, vous pouvez obtenir des chiffres assez facilement en utilisant [0-9] ou \ d. En utilisant {min, max}, vous pouvez spécifier le nombre de caractères ou de caractères à obtenir pour une correspondance.

est ici une bonne référence: http://www.regular-expressions.info/reference.html