2010-03-22 52 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(文本)==文本