441

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

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

if (isANumber){
    ..
}

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

4

14 回答 14

894

怎么样

let isnum = /^\d+$/.test(val);
于 2009-11-22T15:26:24.100 回答
87
string.match(/^[0-9]+$/) != null;
于 2009-11-22T15:26:55.727 回答
21
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false
于 2009-11-22T21:25:22.617 回答
18

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

var isNumber = /^\d+\.\d+$/.test(value);
于 2017-07-24T10:06:40.207 回答
10

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

此方法通过使用扩展运算符将字符串拆分为数组,然后使用该every()方法测试数组中的所有元素(字符)是否包含在数字字符串中'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

于 2018-11-21T23:48:02.697 回答
7

这就是你想要的

function isANumber(str){
  return !/\D/.test(str);
}
于 2016-12-18T07:11:25.507 回答
7

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

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

于 2018-06-28T14:11:22.810 回答
6
function isNumeric(x) {
    return parseFloat(x).toString() === x.toString();
}

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

于 2018-07-18T20:32:02.380 回答
2

好吧,您可以使用以下正则表达式:

^\d+$
于 2009-11-22T15:26:42.373 回答
2

如果您需要在同一验证中使用整数和浮点数

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

于 2020-08-05T13:50:12.070 回答
1

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

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

这将只测试数字和用“。”分隔的数字 第一个测试将涵盖诸如 0.1 和 0 之类的值,但也包括 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 
于 2020-06-09T15:25:18.807 回答
0

如果你使用 jQuery:

$.isNumeric('1234'); // true
$.isNumeric('1ab4'); // false
于 2020-07-03T11:44:13.427 回答
0

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

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

isdigit("10")//true
isdigit("any String")//false
于 2020-10-24T08:57:32.640 回答
-2
c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

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

于 2019-07-25T09:04:09.623 回答