2010-03-22 5 views
6

J'utilise l'expression régulière suivante pour valider les numéros dans mon fichier javascript:javascript nombres décimaux Validation

var valid = (val.match(/^\d+$/)); 

Il fonctionne très bien pour les nombres entiers comme 100, 200, etc, mais pour des choses comme 1,44, 4,11, etc, il renvoie false. Comment puis-je le changer afin que les nombres avec une décimale soient également acceptés?

Répondre

27
var valid = (val.match(/^\d+(?:\.\d+)?$/)); 

Correspondances:

1 : yes 
1.2: yes 
-1.2: no 
+1.2: no 
    .2: no 
1. : no 

var valid = (val.match(/^-?\d+(?:\.\d+)?$/)); 

Correspondances:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: no 
    .2: no 
1. : no 

var valid = (val.match(/^[-+]?\d+(?:\.\d+)?$/)); 

Correspondances:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: no 
1. : no 

var valid = (val.match(/^[-+]?(?:\d*\.?\d+$/)); 

Correspondances:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: yes 
1. : no 

var valid = (val.match(/^[-+]?(?:\d+\.?\d*|\.\d+)$/)); 

Correspondances:

1 : yes 
1.2: yes 
-1.2: yes 
+1.2: yes 
    .2: yes 
1. : yes 
3

essayez ceci:

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

"4." est techniquement un nombre décimal valide mais cette regex ne correspondra pas à cela. Vous devriez rendre les chiffres '\ d +' dans le groupe facultatifs. –

0

Si vous souhaitez accepter décimaux (y compris < 1) et entiers, avec option signes + ou -, vous pouvez utiliser valide = Number (val).

Ou une expression rationnelle:

valid=/^[+\-]?(\.\d+|\d+(\.\d+)?)$/.test(val); 
3

isNaN semble une meilleure solution pour moi.

> isNaN('1') 
false 
> isNaN('1a') 
true 
> isNaN('1.') 
false 
> isNaN('1.00') 
false 
> isNaN('1.03') 
false 
> isNaN('1.03a') 
true 
> isNaN('1.03.0') 
true 
+0

fonctionne parfaitement bien avec positif/négatif aussi – seanmonstar

0

! IsNaN (texte) & & parseFloat (texte) == texte

Questions connexes