gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:09:42 24 4
gpt4 key购买 nike

在 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's answer非常接近,但在以下情况下会失败:

// 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")。

我觉得这套+30 unit tests值得分享制作了许多函数实现,并分享了通过我所有测试的一个:

function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}

附言 isNaN & isFinite由于强制转换为数字而产生令人困惑的行为。在 ES6 中,Number.isNaN & Number.isFinite会解决这些问题。使用它们时请记住这一点。


更新: Here's how jQuery does it now (2.2-stable) :

isNumeric: function(obj) {
var realStringObj = obj && obj.toString();
return !jQuery.isArray(obj) && (realStringObj - parseFloat(realStringObj) + 1) >= 0;
}

更新: Angular 4.3 :

export function isNumeric(value: any): boolean {
return !isNaN(value - parseFloat(value));
}

关于javascript - 在 JavaScript 中验证十进制数字 - IsNumeric(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com