【问题标题】:Pure JavaScript: a function like jQuery's isNumeric() [duplicate]纯 JavaScript:像 jQuery 的 isNumeric() 这样的函数 [重复]
【发布时间】:2012-03-31 18:26:35
【问题描述】:

纯 JavaScript 中是否有类似isNumeric 的函数?

我知道 jQuery 有这个函数来检查整数。

【问题讨论】:

标签: javascript


【解决方案1】:

没有isNumeric() 类型的函数,但您可以添加自己的:

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

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

【讨论】:

  • 此解决方案用于/取自 Jquery 库 $.isNumeric(obj) api.jquery.com/jquery.isnumeric
  • @Matt 我的评论针对的是评论,而答案中的注释指出parseInt 是错误的做法(然后继续使用parseFloat,这似乎并不真正不同的)。有趣的是,isFinite 会在几乎所有情况下自行获得您想要的结果(除了空格字符串,由于某种原因返回true),所以parseIntparseFloat 在这种情况下似乎无关紧要。我当然找不到 parseInt 产生影响的函数的单个输入。
  • 不要使用这个功能它不适用于浮动。有关实现它的想法,请参见 jQuery 的 isNumeric
  • 小心。对于包含数字元素的单元素数组,此函数返回 true:isNumeric([0]) === trueisNumeric(['123']) === true
【解决方案2】:

这应该会有所帮助:

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

很好的链接:Validate decimal numbers in JavaScript - IsNumeric()

【讨论】:

    【解决方案3】:
    function IsNumeric(val) {
        return Number(parseFloat(val)) === val;
    }
    

    【讨论】:

    • 我认为这个的更新版本实际上是最好的答案。我觉得奇怪的是它的赞成票最少。起初我认为如果用NaN 调用IsNumeric 可能会失败,但由于NaN 的怪癖,它不等于任何实际工作正常的东西。
    • 而且我认为您也可以将演员表放到Number() 并依靠双等号进行一些转换:let isNumeric = (val) => parseFloat(val) == val;
    • 根据我的要求,我相信许多其他开发人员会拥有它应该是 function IsNumeric(val) { return Number(val)==val;以便在空字符串的情况下忽略。因为我只想验证是否输入了无效值。同时允许不是数字的空字符串。根据场景,我认为所有三个答案都很好
    • 请解释代码。为什么不Number(val).toString() == val.toString()
    • 如果 Val 未定义,则 .ToString 将抛出异常
    【解决方案4】:
    var str = 'test343',
        isNumeric = /^[-+]?(\d+|\d+\.\d*|\d*\.\d+)$/;
    
    isNumeric.test(str);
    

    【讨论】:

    • 嗯,根据用例,这实际上可能是最糟糕的答案。例如,这将返回 false' 1''0x01',不考虑本地化...
    • 我更喜欢这个答案,如果您从字符串或用户输入中读取块,isNaN 和 parseInt 可能会导致不需要的误报,例如“123abc”、“2e1”、“0x2”、等等..(即使 jQuery.isNumeric 也会解析为真)。我会使用这样的东西function isNumeric(str) { return /^\d*\.{0,1}\d*$/.test(str); }
    • 嗯,根据用例,它实际上可能是这里的最佳答案。
    • 只要您修剪字符串并且不担心替代表示,这是一个合理的答案。
    【解决方案5】:

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

    但对于 '1 dog' 或 '1,2,3,4' 为假,+- 无穷大和任何 NaN 值。

    【讨论】:

    • isFinite(null) --> true, isFinite([]) --> true, isFinite('') true
    • 从 ES2015 开始有 Number.isFinite
    【解决方案6】:

    有 Javascript 函数 isNaN 可以做到这一点。

    isNaN(90)
    =>false
    

    所以你可以通过

    检查数字
    !isNaN(90)
    =>true
    

    【讨论】:

    • 除了 "" 和 true 和 false 不是非数字...
    • 我收到isNaN(null) === false
    • isNaN("null") === true; isNaN(null) === false; 我也是
    • isNaN(true) === false; isNaN(false) === false;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2020-01-02
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多