2010-03-22 12 views
6

Używam następujące wyrażenia regularnego sprawdzania poprawności numerów w moim pliku javascript:Members javascript liczby dziesiętne

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

To działa dobrze dla liczb całkowitych, takich jak 100, 200, itd, jednak na takie rzeczy jak 1,44, 4,11, etc, zwraca false. Jak mogę to zmienić, aby akceptowane były również cyfry dziesiętne?

Odpowiedz

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

zestawienia:

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

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

zestawienia:

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

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

zestawienia:

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

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

zestawienia:

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

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

zestawienia:

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

spróbuj tego:

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

"4." jest technicznie poprawną liczbą dziesiętną, ale to wyrażenie regularne nie będzie zgodne. Powinieneś uczynić cyfry '\ d + 'w grupie opcjonalne. –

0

Jeśli chcesz zaakceptować dziesiętnych (w tym < 1) oraz liczby całkowite z opcjonalnym + lub - znaków, można użyć właściwego = liczba (val).

Albo regexp:

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

isNaN wydaje się lepszym rozwiązaniem dla mnie.

> 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

działa idealnie dobrze z dodatnim/ujemnym – seanmonstar

0

! IsNaN (tekst) & & parseFloat (tekst) == tekst

Powiązane problemy