2010-08-04 17 views
3

Mon regex ne fonctionnera pas sur le numéro un seul chiffreregex int ou float

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

je en ai besoin pour travailler sur des nombres non signés:

1 (single digit numbers, without fractions) - currently it fails on them 
1.0; 0.31 (floating point numbers) 

Nombre avant fraction peut être 1-7 chiffres; après la fraction 1-2 chiffres.

Merci pour vous!

+1

"unsigned" et "floating point" sont internes à la machine, et n'ont rien à voir avec leur représentation lisible par l'homme. – quantumSoup

Répondre

6

Vous spécifiez qu'il doit y avoir de 1 à 7 chiffres, puis un point décimal optionnel, puis un ou deux chiffres supplémentaires. Essayez:

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

Notez que cela n'autorise pas les décimales finales (c'est-à-dire "1."). Si vous voulez permettre cela, cela devrait fonctionner:

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

Dans le même temps, la deuxième expression permet des nombres avec 8-9 chiffres. – quantumSoup

+1

@Air fixé cela. – Artefacto

1

Marquez le point décimal et les chiffres après l'option. par exemple.

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

De cette façon, vous pouvez avoir un soit 1 - 7 chiffres ou 1 - 7 chiffres suivis d'une virgule décimale suivie par 1 ou 2 chiffres mais si vous aviez des chiffres suivi d'un point décimal, mais pas d'autres chiffres qui ne seraient pas valides.