在 JavaScript 中验证十进制数字的最简洁、最有效的方法是什么?
奖励积分:
明晰。解决方案应该干净简单。
跨平台。
测试用例:
01. IsNumeric('-1') => true
02. IsNumeric('-1.5') => true
03. IsNumeric('0') => true
04. IsNumeric('0.42') => true
05. IsNumeric('.42') => true
06. IsNumeric('99,999') => false
07. IsNumeric('0x89f') => false
08. IsNumeric('#abcdef') => false
09. IsNumeric('1.2.3') => false
10. IsNumeric('') => false
11. IsNumeric('blah') => false
原文由 Michael Haren 发布,翻译遵循 CC BY-SA 3.0 许可协议
@Joel 的答案 非常接近,但在以下情况下会失败:
前段时间我必须实现一个
IsNumeric
函数,以找出一个变量是否包含数值, 无论其类型如何,它都可能是一个包含数值的String
(我还必须考虑指数符号等),一个Number
对象,几乎任何东西都可以传递给该函数,我无法做出任何类型假设,需要处理类型强制(例如+true == 1;
但true
不应被视为"numeric"
)。我认为值得分享对众多功能实现进行的这组 +30 单元测试,并分享通过我所有测试的单元测试:
由于强制转换为数字, PS isNaN 和 isFinite 具有令人困惑的行为。在 ES6 中, Number.isNaN 和 Number.isFinite 将解决这些问题。使用它们时请记住这一点。
更新:
这是 jQuery 现在的做法(2.2-stable) :
更新:
角 4.3 :