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

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

if (isANumber){
    ..
}

但意识到它也允许+和-。基本上,我想确保输入只包含数字,没有其他字符。由于+100和-5都是数字,isNaN()不是正确的方法。 也许regexp就是我所需要的?任何建议吗?


当前回答

如果你使用jQuery:

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

其他回答

c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

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

以防你需要整数和浮点数在同一个验证

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

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

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。所以我建议的解决方案是将value颠倒,这样。1将是1。那么相同的正则表达式将不允许它。

例子:

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

如果你使用jQuery:

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

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

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”的字符代码。