2010-12-06 4 views
0

Comment puis-je changer cette expression régulière /^[1-9][0-9]{0,3}$|^[1-9][0-9]{0,3}[\.][0-9]$/ pour voir qu'il accepte « 0,1 » et « 0,2 », et ainsi sur des valeurs, mais il ne doit pas accepter « 0.0 »expression régulière pour correspondre à cet ensemble de valeurs

+0

Essayez-vous de valider un valeur décimale pour voir si ce n'est pas 0.0? – BoltClock

+1

Quelles valeurs devraient ou ne devraient pas être acceptées? –

+0

@Bolt: Iam cherche à accepter ces valeurs 0.1.0.2 et ainsi de suite et 0.0 n'est pas valide pour mon domaine que iam en mesure de valider – Someone

Répondre

1

RegExp couvrant les cas existants, mais permettant également des décimales 0.1 <= n <= 0.9.

/^[1-9][0-9]{0,3}$|^[1-9][0-9]{0,3}\.[0-9]$|^0\.[1-9]$/ 

ou mieux, de la solution de Dreynold:

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

Vieille réponse, pour référence, exigences mises à jour par OP:

Si vous voulez une seule décimale, avec les valeurs autorisées existantes:

/^[1-9][0-9]{0,3}$|^[1-9][0-9]{0,3}[\.][0-9]$|^0\.[1-9]$/ 

Si seulement la décimale puis:

/^0\.[1-9]$/ 

Si plusieurs décimales puis:

/^[1-9][0-9]{0,3}$|^[1-9][0-9]{0,3}[\.][0-9]$|^0\.[1-9][0-9]*$/ 

ou

/^0\.[1-9][0-9]*$/ 
+0

@orbling: Il accepte plus d'un nombre décimal après le point – Someone

+0

@Derby: Modifié avec plusieurs versions décimales. Notez qu'il va bloquer 0.05, si vous avez besoin de valeurs inférieures à 0.1, alors il a besoin d'une autre clause. – Orbling

+0

@orbling: J'ai besoin de quelque chose comme ça une seule décimale est valide après le point qui est 1.9 et 2.9 mais pas 2.99 (invalide) et 0.1 est valide – Someone

2

un à quatre chiffres, avec ou sans précision décimale de 1:

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

0,1 par 0,9, l'étape 0.1:

/^0\.[1-9]$/ 


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

Cela ne vraiment ressemble pas à un problème de regex: vous seriez bien mieux (du point de vue de la maintenabilité et la lisibilité) traiter vos numéros comme numéros et faire un simple vérification de gamme:

var isValid = function (x) { 
    // Make sure we're dealing with a number 
    x = parseFloat(x); 
    // If x is greater than zero but less than 0.9 
    // this expression evaluates to true so the 
    // function returns true, otherwise it evaluates 
    // to false so the function returns false. 
    return (x > 0 && x <= 0.9); 
}; 

bien sûr, il n'utilise pas regexes (qui est ce que vous demandiez) mais il n'y a aucune raison de les utiliser pour résoudre ce problème (surtout parce qu'il est beaucoup plus facile à résoudre en utilisant la méthode ci-dessus)

+0

Même si je suis d'accord avec vous, ce n'est pas vraiment ce qu'il a demandé, n'est-ce pas? : | – jcolebrand

+2

Non, ce n'est pas le cas, mais il n'y a aucune raison de ne pas recommander une méthode meilleure/plus correcte, n'est-ce pas? – xj9

Questions connexes