2010-03-22 27 views
6

Sto utilizzando la seguente espressione regolare per convalidare i numeri nel mio file javascript:Convalida javascript numeri decimali

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

Funziona bene per i numeri interi come 100, 200, ecc, ma per cose come 1.44, 4.11, ecc, restituisce false. Come posso cambiarlo in modo che vengano accettati anche i numeri decimali?

risposta

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

Partite:

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

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

Partite:

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

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

Partite:

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

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

Partite:

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

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

Partite:

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

provare questo:

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

"4." è tecnicamente un numero decimale valido ma questa regex non corrisponderà a quello. Dovresti rendere le cifre '\ d +' nel gruppo opzionale. –

0

Se si desidera accettare decimali (compresi < 1) e interi, con optional + o - segni, si potrebbe usare valido = Number (val).

O un regexp:

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

isNaN sembra una soluzione migliore per me.

> 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

funziona perfettamente anche con positivo/negativo – seanmonstar

0

! IsNaN (testo) & & parseFloat (testo) == testo

Problemi correlati