Validating javascript decimal numbers
I'm using the following regexp to validate numbers in my j开发者_高级运维avascript file:
var valid = (val.match(/^\d+$/));
It works fine for whole numbers like 100, 200, etc, however for things like 1.44, 4.11, etc, it returns false. How can I change it so numbers with a decimal are also accepted?
var valid = (val.match(/^\d+(?:\.\d+)?$/));
Matches:
1 : yes
1.2: yes
-1.2: no
+1.2: no
.2: no
1. : no
var valid = (val.match(/^-?\d+(?:\.\d+)?$/));
Matches:
1 : yes
1.2: yes
-1.2: yes
+1.2: no
.2: no
1. : no
var valid = (val.match(/^[-+]?\d+(?:\.\d+)?$/));
Matches:
1 : yes
1.2: yes
-1.2: yes
+1.2: yes
.2: no
1. : no
var valid = (val.match(/^[-+]?(?:\d*\.?\d+$/));
Matches:
1 : yes
1.2: yes
-1.2: yes
+1.2: yes
.2: yes
1. : no
var valid = (val.match(/^[-+]?(?:\d+\.?\d*|\.\d+)$/));
Matches:
1 : yes
1.2: yes
-1.2: yes
+1.2: yes
.2: yes
1. : yes
try this:
^[-+]?\d+(\.\d+)?$
isNaN seems like a better solution to 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
If you want to accept decimals (including <1) and integers, with optional + or - signs, you could use valid=Number(val).
Or a regexp:
valid=/^[+\-]?(\.\d+|\d+(\.\d+)?)$/.test(val);
!isNaN(text) && parseFloat(text) == text
精彩评论