【问题标题】:Check if string contains only digits检查字符串是否仅包含数字
【发布时间】:2010-12-19 05:42:54
【问题描述】:

我想检查 string 是否只包含数字。我用这个:

var isANumber = isNaN(theValue) === false;

if (isANumber){
    ..
}

但意识到它也允许+-。基本上,我想确保 input 只包含数字而不包含其他字符。因为+100-5 都是数字,所以isNaN() 不是正确的方法。 也许我需要一个正则表达式?有什么建议吗?

【问题讨论】:

    标签: javascript numbers digits


    【解决方案1】:

    这是一个不使用正则表达式的解决方案

    const  isdigit=(value)=>{
        const val=Number(value)?true:false
        console.log(val);
        return val
    }
    
    isdigit("10")//true
    isdigit("any String")//false
    

    【讨论】:

    • 0 为假
    • 对于 0x123 将是真的:/
    • 任何末尾有空格的数字都会计算为真
    【解决方案2】:

    如果您需要整数和浮点数同时验证

    /^\d+\.\d+$|^\d+$/.test(val)

    【讨论】:

    • 自 2009 年以来,这个问题一直在询问如何验证字符串是否仅包含数字。这篇文章是对另一个问题的正确答案。
    【解决方案3】:

    如果你使用 jQuery:

    $.isNumeric('1234'); // true
    $.isNumeric('1ab4'); // false
    

    【讨论】:

      【解决方案4】:

      怎么样

      let isnum = /^\d+$/.test(val);
      

      【讨论】:

      • 这太棒了!我很好奇 \d 不是指十进制的数字吗?
      • @dewwwald:有些语言实现它的方式不同,但在 JavaScript 中,\d完全等同于 [0-9]
      • Here 您可以找到有关Regular Expressions 工作原理的文档
      • /^\d*$/ 改为,如果您发现仅包含数字的空字符串。
      • @DrorBar 很抱歉我的英语很差,让我改写一下:“如果您认为空字符串只有数字。”
      【解决方案5】:

      如果你想包含浮点值,你也可以使用下面的代码

      theValue=$('#balanceinput').val();
      var isnum1 = /^\d*\.?\d+$/.test(theValue);
      var isnum2 =  /^\d*\.?\d+$/.test(theValue.split("").reverse().join(""));
      alert(isnum1+' '+isnum2);
      

      这将只测试数字和用“。”分隔的数字第一个测试将涵盖诸如 0.1 和 0 之类的值,但也包括 .1 , 它不会允许 0。所以我建议的解决方案是反转 theValue 所以 .1 将是 1。那么相同的正则表达式将不允许它。

      例子:

       theValue=3.4; //isnum1=true , isnum2=true 
      theValue=.4; //isnum1=true , isnum2=false 
      theValue=3.; //isnum1=flase , isnum2=true 
      

      【讨论】:

      • 自 2009 年以来,这个问题一直在询问如何验证字符串是否仅包含数字。这篇文章是对另一个问题的正确答案。
      【解决方案6】:
      c="123".match(/\D/) == null #true
      c="a12".match(/\D/) == null #false
      

      如果字符串只包含数字,它将返回 null

      【讨论】:

        【解决方案7】:

        这是检查字符串是否仅包含数字的另一种有趣且易读的方法。

        该方法通过使用spread operator将字符串拆分成一个数组,然后使用every()方法测试数组are included中的所有元素(字符)是否在数字字符串'0123456789'中:

        const digits_only = string => [...string].every(c => '0123456789'.includes(c));
        
        console.log(digits_only('123')); // true
        console.log(digits_only('+123')); // false
        console.log(digits_only('-123')); // false
        console.log(digits_only('123.')); // false
        console.log(digits_only('.123')); // false
        console.log(digits_only('123.0')); // false
        console.log(digits_only('0.123')); // false
        console.log(digits_only('Hello, world!')); // false

        【讨论】:

        • 这也将返回空字符串''true,以及一个空数组[],一个整数数组[1, 2, 3](一旦它们小于10)。我认为它比基本正则表达式/^\d+$/ 更容易出现错误/误用
        • 这比正则表达式更容易阅读,并且很容易扩展到其他方法。在 TypeScript 中使用时,与长度检查结合使用时,这会非常优雅。
        【解决方案8】:
        function isNumeric(x) {
            return parseFloat(x).toString() === x.toString();
        }
        

        虽然这将在带有前导或尾随零的字符串上返回false

        【讨论】:

          【解决方案9】:

          这是一个不使用正则表达式的解决方案:

          function onlyDigits(s) {
            for (let i = s.length - 1; i >= 0; i--) {
              const d = s.charCodeAt(i);
              if (d < 48 || d > 57) return false
            }
            return true
          }
          

          其中 48 和 57 分别是“0”和“9”的字符代码。

          【讨论】:

            【解决方案10】:

            如果你甚至想支持浮点值(点分隔值),那么你可以使用这个表达式:

            var isNumber = /^\d+\.\d+$/.test(value);
            

            【讨论】:

            • 但是,如果您不使用浮点数而不是 int,它可能会使用“?”返回 false在“。\”解决了这个问题之后。我建议这个 /^\d+[\.,\,]?\d+$/.test(value) 允许逗号和小数点(稍后可能可以将逗号转换为点)
            • @Lucke,您建议的正则表达式只能找到小数点或大于9的数字。如果将第一个\d+更改为\d*?,它将能够匹配0 - 9,以及 .333 等数字
            • 关闭:var isNumber = /^\d*\.?\d+$/.test(value) -- 匹配 '3.5'、'.5'、'3' -- 不匹配 '3'。
            • 自 2009 年以来,这个问题一直在询问如何验证字符串是否仅包含数字。这篇文章是对另一个问题的正确答案。
            【解决方案11】:

            这就是你想要的

            function isANumber(str){
              return !/\D/.test(str);
            }
            

            【讨论】:

            • 这个答案允许空字符串作为有效数字传递。
            【解决方案12】:
            String.prototype.isNumber = function(){return /^\d+$/.test(this);}
            console.log("123123".isNumber()); // outputs true
            console.log("+12".isNumber()); // outputs false
            

            【讨论】:

            • 在 Javascript 中修改内置对象的原型被认为是不好的做法(原则是最少意外,以及未来 ECMA 版本中的潜在冲突) - 改为考虑 isNumber = () =&gt; /^\d+$/.test(this);,并用作 console.log(isNumber("123123));
            • FWIW,在 2009 年发布此答案时,尚未将其视为不好的做法。当时存在的几个 jQuery 竞争对手,在 jQuery 尚未获胜之前,都在实践原型扩展。
            【解决方案13】:
            string.match(/^[0-9]+$/) != null;
            

            【讨论】:

              【解决方案14】:

              嗯,你可以使用下面的正则表达式:

              ^\d+$
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2014-05-07
                • 2014-07-16
                • 1970-01-01
                • 1970-01-01
                • 2013-11-20
                相关资源
                最近更新 更多