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

pat*_*tad 275 javascript numbers digits

我想检查一个string只包含数字.我用过这个:

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

if (isANumber){
    ..
}
Run Code Online (Sandbox Code Playgroud)

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

Sco*_*den 563

怎么样

var isnum = /^\d+$/.test(val);
Run Code Online (Sandbox Code Playgroud)

  • 如果您发现一个仅包含数字_的空字符串,则** / ^ \ d * $ /`**。 (5认同)
  • @dewwwald:有些语言以不同的方式实现它,但在JavaScript中,`\ d`*正好*等同于`[0-9]`. (4认同)
  • [在这里](https://www.w3schools.com/js/js_regexp.asp)您可以找到有关“正则表达式”如何工作的文档 (2认同)
  • @DrorBar,我很抱歉我的英语不好,让我重新表述一下:“如果你认为空字符串_只有数字_。” (2认同)
  • 这个解决方案很好,但对于像“000000001”这样的东西来说是正确的 (2认同)

Jas*_*n S 57

string.match(/^[0-9]+$/) != null;
Run Code Online (Sandbox Code Playgroud)


bal*_*ton 16

String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false
Run Code Online (Sandbox Code Playgroud)

  • 在 Javascript 中修改内置对象的原型被认为是不好的做法(最小意外原则,以及未来 ECMA 版本中的潜在冲突) - 考虑 `isNumber = () => /^\d+$/.test(this);`相反,并使用 `console.log(isNumber("123123));` (7认同)
  • FWIW,在 2009 年发布这个答案时,它还没有被认为是一种不好的做法。在 jQuery 尚未获胜之前,当时存在的几个 jQuery 竞争对手都在实践原型扩展。 (6认同)

Adi*_*Sai 10

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

var isNumber = /^\d+\.\d+$/.test(value);
Run Code Online (Sandbox Code Playgroud)

  • 关闭:```var isNumber =/^\d*\.?\ d + $/.test(value)``` - 匹配'3.5','.5','3' - 不匹配'3 ". (4认同)
  • @Lucke,您建议的正则表达式只能找到小数或大于 9 的数字。如果您将第一个 `\d+` 更改为 `\d*?`,它将能够匹配 0 - 9,如下所示以及 0.333 等数字 (2认同)

小智 8

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

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


Pet*_*rth 7

function isNumeric(x) {
    return parseFloat(x).toString() === x.toString();
}
Run Code Online (Sandbox Code Playgroud)

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


SC1*_*000 6

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

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
}
Run Code Online (Sandbox Code Playgroud)

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


小智 5

这就是你想要的

function isANumber(str){
  return !/\D/.test(str);
}
Run Code Online (Sandbox Code Playgroud)

  • 此答案允许空字符串作为有效数字传递。 (3认同)

Gra*_*ler 5

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

此方法通过使用spread运算符将字符串拆分为数组来工作,然后使用该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
Run Code Online (Sandbox Code Playgroud)

  • 这比正则表达式更容易阅读,并且可以轻松扩展到其他方法。当在 TypeScript 中使用并与长度检查结合使用时,这可以非常优雅。 (3认同)