如何检查字符串是否为正整数,允许0和全0小数

时间:2015-07-22 21:22:19

标签: javascript regex

因此,为了检查字符串是否为正整数,我做了一些研究,并在某处找到了这个解决方案: Validate that a string is a positive integer

function isNormalInteger(str) {
    return /^\+?(0|[1-9]\d*)$/.test(str);
}

但是,我对此进行了测试,发现小数位上带有纯0的数字似乎不起作用。例如:

  

15 ===>作品!

     

15.0 ====>不起作用:(

     

15.000 ===>不起作用:(

在现有方法的基础上,如何在小数位上允许纯0并使它们全部工作?请注意15.38应该不起作用,但应该15.00。

3 个答案:

答案 0 :(得分:3)

这里不需要使用正则表达式。

function isNormalInteger(str) {
   var n = parseInt(str);
   return n > 0 && n == +str;
}

然后测试一下:

isNormalInteger(15)
true
isNormalInteger(15.00)
true
isNormalInteger(15.38)
false
isNormalInteger(-15)
false
isNormalInteger(-15.1)
false

答案 1 :(得分:1)

快速而肮脏

function isNormalInteger(str) {
    var ival=parseInt(str);
    return ival!=NaN && ival>=0 && ival==parseFloat(str);
}

答案 2 :(得分:1)

首先,函数应该被称为isNormalNumber而不是isNormalInteger,因为它接受小数,那么这就是你需要的正则表达式:



    function isNormalNumber(str) {
      return /^\+*[0-9]\d*(\.0+)?$/.test(str);
    }

    alert(isNormalNumber("+10.0") + "::" + isNormalNumber("+10.9") + "::" + isNormalNumber("10"));




返回true::false:true

修改

这是一项编辑,可避免匹配数字00123407878中的前导零:

^\+*[1-9]\d*(\.0+)?$|^0(\.0+)?$