检查字符串是否仅包含数字

问题描述 投票:240回答:10

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

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

if (isANumber){
    ..
}

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

javascript numbers digits
10个回答
523
投票

怎么样

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

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

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


51
投票
string.match(/^[0-9]+$/) != null;

17
投票
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

7
投票

如果您想要支持浮点值(点分隔值),那么您可以使用以下表达式:

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

5
投票

这就是你想要的

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

5
投票

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

此方法通过使用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

2
投票

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

^\d+$

2
投票

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

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


2
投票
function isNumeric(x) {
    return parseFloat(x).toString() === x.toString();
}

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

© www.soinside.com 2019 - 2024. All rights reserved.