验证JavaScript中的十进制数字-IsNumeric()
在JavaScript中验证十进制数字的最干净,最有效的方法是什么?
奖励积分:
- 明晰。解决方案应该干净简单。
- 跨平台。
测试用例:
01. IsNumeric('-1') => true02. 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