验证JavaScript中的十进制数字-IsNumeric()

JavaScript中验证十进制数字的最干净,最有效的方法是什么?

奖励积分:

  1. 明晰。解决方案应该干净简单。
  2. 跨平台。

测试用例:

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

回答:

@Joel的答案非常接近,但在以下情况下将失败:

// Whitespace strings:

IsNumeric(' ') == true;

IsNumeric('\t\t') == true;

IsNumeric('\n\r') == true;

// Number literals:

IsNumeric(-1) == false;

IsNumeric(0) == false;

IsNumeric(1.1) == false;

IsNumeric(8e5) == false;

前段时间,我必须实现一个IsNumeric函数,以查明变量是否包含数值,

,它都可能是String包含数值(我还必须考虑指数符号等),Number对象,几乎任何东西都可以传递给该函数,我不能做任何类型假设,要注意类型强制(例如,+true

== 1;true不应视为"numeric")。

分享通过的测试:

function isNumeric(n) {

return !isNaN(parseFloat(n)) && isFinite(n);

}

由于强制转换为数字,因此PS的行为令人困惑。在ES6中,Number.isNaN和Number.isFinite将解决这些问题。使用它们时请记住这一点。


这是jQuery现在的方式(2.2稳定):

isNumeric: function(obj) {

var realStringObj = obj && obj.toString();

return !jQuery.isArray(obj) && (realStringObj - parseFloat(realStringObj) + 1) >= 0;

}

: Angular4.3:

export function isNumeric(value: any): boolean {

return !isNaN(value - parseFloat(value));

}

以上是 验证JavaScript中的十进制数字-IsNumeric() 的全部内容, 来源链接: utcz.com/qa/427985.html

回到顶部