目前我正在使用此reg exp:
var valid = (value.match(/^\d+$/));
Run Code Online (Sandbox Code Playgroud)
但对于像"0.40"或"2.43"这样的数字,这不起作用.如何更改上面的reg exp以匹配浮点数?
Cre*_*esh 55
你不需要正则表达式!isNaN将你的价值投射到Number:
var valid = !isNaN(value);
Run Code Online (Sandbox Code Playgroud)
例如:
!isNaN('0'); // true
!isNaN('34.56'); // true
!isNaN('.34'); // true
!isNaN('-34'); // true
!isNaN('foo'); // false
!isNaN('08'); // true
Run Code Online (Sandbox Code Playgroud)
不情愿编辑(感谢CMS):
诅咒类型强制,!isNaN(''),!isNaN(' '),!isNaN('\n\t'),等都是true!
空白测试+ isNaNFTW:
var valid = !/^\s*$/.test(value) && !isNaN(value);
Run Code Online (Sandbox Code Playgroud)
呸.
mke*_*bbs 28
var valid = (value.match(/^-?\d*(\.\d+)?$/));
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 26
继续使用@Crescent Fresh方法,前段时间,我不得不进行数字验证,但是我需要验证变量是否包含一个数字而不知道它的类型,它可能是一个String包含数值,如本例所示,(I不得不考虑指数符号等),一个Number对象,基本上我无法做任何类型的假设.
我不得不关注隐式类型转换,例如我指向@Crescent,isNaN对我的情况来说还不够:
// string values
!isNaN(' ') == true;
!isNaN('\t\t') == true;
!isNaN('') == true;
// boolean values
!isNaN(true) == true;
!isNaN(false) == true;
// etc..
Run Code Online (Sandbox Code Playgroud)
我最终编写了一组30多个 单元测试,你可以在这里找到并运行,以下函数是通过我所有测试的函数:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)
这是我的RegExp版本.
var n = /^[+-]?((\.\d+)|(\d+(\.\d+)?))$/;
Run Code Online (Sandbox Code Playgroud)
比赛
n.test('3');
n.test('3.0');
n.test('0.3');
n.test('.3');
n.test('+3');
n.test('+3.0');
n.test('+0.3');
n.test('+.3');
n.test('-3');
n.test('-3.0');
n.test('-0.3');
n.test('-.3');
Run Code Online (Sandbox Code Playgroud)
不匹配
n.test('');
n.test('+');
n.test('-');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47161 次 |
| 最近记录: |