纯JavaScript:像jQuery的函数isNumeric()

Rin*_*rge 342 javascript

是否有像isNumeric纯JavaScript 一样的功能?

我知道jQuery有这个功能来检查整数.

Sud*_*oti 564

没有任何isNumeric()类型的功能,但您可以添加自己的功能:

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)

注意:由于parseInt()不是检查数字的正确方法,因此不应使用它.

  • 此解决方案用于Jquery库$ .isNumeric(obj)http://api.jquery.com/jquery.isnumeric/ (11认同)
  • 小心。对于包含数字元素的单元素数组,此函数返回 true: ```isNumeric([0]) === true``` 和 ```isNumeric(['123']) === true``` (3认同)
  • @Matt我的评论是针对评论和答案中的注释,指出“parseInt”是这样做的错误方法(然后继续使用“parseFloat”,这看起来并没有什么不同)。有趣的是,“isFinite”几乎在所有情况下都会为您提供所需的结果(除了空白字符串,由于某种原因返回“true”),因此“parseInt”与“parseFloat”在这种情况下似乎无关紧要。我当然找不到该函数中“parseInt”产生影响的单个输入。 (2认同)
  • 不要使用此功能,它不适用于浮点数。有关实现它的想法,请参见jQuery的[isNumeric`](https://github.com/jquery/jquery/blob/bf48c21d225c31f0f9b5441d95f73615ca3dcfdb/src/core.js#L206)。 (2认同)
  • 那Number.isInteger()呢?https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger (2认同)

Tat*_*nit 200

这应该有所帮助:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)

非常好的链接:在JavaScript中验证十进制数字 - IsNumeric()


Ali*_*yun 99

function IsNumeric(val) {
    return Number(parseFloat(val)) === val;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个更新版本实际上是最好的答案.我觉得奇怪的是,它的票数最少.我首先想到,如果`IsNumeric`被称为'NaN`,它可能会失败,但由于NaN的怪癖,它不等于任何它实际上工作得很好. (7认同)
  • 而且我认为你也可以将转换放到`Number()`并依赖double equals进行一些转换:`let isNumeric =(val)=> parseFloat(val)== val;` (2认同)

Sou*_*amy 24

有Javascript函数isNaN会做到这一点.

isNaN(90)
=>false
Run Code Online (Sandbox Code Playgroud)

所以你可以检查数字

!isNaN(90)
=>true
Run Code Online (Sandbox Code Playgroud)

  • 除了""和真假,这些都不是一个数字...... (35认同)
  • 我得到`isNaN(null)=== false` (6认同)
  • `isNaN(true) === false; isNaN(假) === 假;` (2认同)

rya*_*yan 15

var str = 'test343',
    isNumeric = /^[-+]?(\d+|\d+\.\d*|\d*\.\d+)$/;

isNumeric.test(str);
Run Code Online (Sandbox Code Playgroud)

  • 那么,根据用例,它实际上可能是最糟糕的答案.例如,这会对`'1'或''0x01'返回`false`,不考虑本地化... (6认同)
  • 那么,根据用例,它实际上可能是最好的答案. (3认同)

ken*_*bec 11

isFinite(String(n))对于n = 0或'0','1.1'或1.1,返回true,

但对于'1只狗'或'1,2,3,4',+ - 无穷大和任何NaN值都是假的.

  • isFinite(null) - > true,isFinite([]) - > true,isFinite('')true (19认同)
  • 从ES2015开始,有[Number.isFinite](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite) (2认同)