2010-03-22 85 views
6

我使用正則表達式之後在我的JavaScript文件來驗證數字:驗證JavaScript的十進制數

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

它工作正常的整數像100,200等,但對於像1.44,4.11,它會返回false。我怎樣才能改變它,使小數的數字也被接受?

回答

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

匹配:

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

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

匹配:

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

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

匹配:

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

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

相配:

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

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

相配:

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

試試這個:

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

「4」。在技​​術上是一個有效的十進制數,但是這個正則表達式不會匹配。您應該使組中的\ d +數字爲可選。 – 2010-03-22 20:27:12

0

如果你想接受小數(包括< 1)和整數,可選+或 - 號,可以使用有效=號(VAL)。

還是一個正則表達式:

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

isNaN似乎是一個更好的解決方案給我。

> 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

也正面/負面地完美地工作 – seanmonstar 2010-03-22 20:40:41

0

!isNaN(文本)& & parseFloat(文本)==文本