如何在javascript中验证数字(包括浮点数)

Cli*_*ote 21 javascript regex

目前我正在使用此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)

呸.

  • 接受的答案也不接受诸如".42"或"37"之类的数字. (4认同)
  • 它也很有趣,因为接受的答案不接受负数:) (3认同)
  • 诅咒你的JavaScript!“[tab][space][tab]”在我的书中**不是数字**!:-P (2认同)

mke*_*bbs 28

var valid = (value.match(/^-?\d*(\.\d+)?$/));
Run Code Online (Sandbox Code Playgroud)

  • 这个错误的正则表达式标记无效,例如这些有效数字:+42 42. 42e42 (2认同)

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)


KLi*_*heR 6

这是我的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)

  • 这不会捕获尾随小数。例如。`3.`。为了捕获我有:`/^[+-]?((\.\d+)|(\d+(\.\d+)?)|(\d+\.))$/` (2认同)