2010-07-27 6 views
1

Je suis en train de créer un Regex JavaScript pour tester:Qu'est-ce que je manque dans ce RegEx?

un # valide entre 0 et 99,9 (où un seul chiffre décimal est autorisé) par exemple 3.45 n'est pas valide. Par conséquent, tout blanc est correct, tout nombre entier compris entre 0 et 99 est correct, et une valeur décimale est autorisée.

J'ai ce jusqu'à présent, mais il permet à des valeurs telles que 3.45 passer:

$^|$[0-9][0-9]?^|$[0-9][0-9]?.[0-9]^ 
+2

Qu'est-ce qui ne va pas avec 'test de fonction (num) {return (0 <= num) && (num <99,9) && (num * 10% 1 === 0); } '? –

+0

Je devrais vérifier que c'est un nombre que je connais d'abord, pas trop dur ... 'isNaN()' ... sinon ça marcherait aussi. Dans mon scénario spécifique, les tests regex sont déjà intégrés, donc le branchement semble le plus facile. – danny

+0

'05.5' est-il considéré comme une réponse valable? Qu'en est-il de '.5'? – scunliffe

Répondre

9

Deux problèmes je peux voir

  • Vous mêlé^et $.
  • Votre point décimal doit s'échapper \..
+0

doh! J'aurais passé toute la journée à combattre les matches intérieurs - merci pour le tremblement de tête. – danny

4

Mark déjà dit ce qui ne va pas avec votre expression. Voici une autre façon comment vous pouvez l'écrire:

^(\d\d?(\.\d)?)?$ 

Explication:

  • ^ correspond au début de la chaîne
  • (...)? rend le nombre entier en option
  • $ correspond à la fin de la correspond à
  • \d\d? correspond à un ou deux chiffres (? m acs la seconde option)
  • (\.\d)? correspond à un point . et un chiffre (? rend en option)
1

Je ne l'ai jamais vraiment utilisé JavaScript beaucoup, mais cela devrait faire le travail ...

^[0-9][0-9]?(?:\.[0-9])?$ 
+0

Oops, Felix Kling posté pendant que je tapais, les deux modèles sont assez similaires, mais il a pris en compte en blanc, ce que je n'ai pas (manqué cette exigence). –

+0

Ne correspond pas à la chaîne vide. – Toto

+0

Vous ne dites pas ... jeez. –

0

Ressaisissez votre regex comme:

^$|^[0-9][0-9]?$|^[0-9][0-9]?\.[0-9]$ 

Mais mieux, utiliser celui de Felix roi.

0

Une autre variante est

/^\d{0,2}(\.\d)?$/ 

qui acceptera de tels chiffres .3 si ce sont d'être autorisés.

Questions connexes