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

IT技术 javascript numbers digits
2021-02-02 18:36:49

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

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

if (isANumber){
    ..
}

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

6个回答

怎么样

let isnum = /^\d+$/.test(val);
这很棒!我很好奇 \d 不是指十进制的数字吗?
2021-03-20 18:36:49
@DrorBar 我很抱歉我的英语不好,让我改写一下:“如果您认为空字符串只有数字。”
2021-03-24 18:36:49
@dewwwald:有些语言实现不同的看法,但在JavaScript中,\d正好相当于[0-9]
2021-03-29 18:36:49
/^\d*$/相反,如果您发现一个仅包含数字的空字符串
2021-04-05 18:36:49
在这里 您可以找到有关Regular Expressions工作原理的文档
2021-04-09 18:36:49
string.match(/^[0-9]+$/) != null;
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false
FWIW,在 2009 年发布此答案时,尚未将其视为不良做法。当时存在的几个 jQuery 竞争对手,在 jQuery 尚未获胜之前,都实践了原型扩展。
2021-03-13 18:36:49
在 Javascript 中修改内置对象的原型被认为是不好的做法(最小意外原则,以及未来 ECMA 版本中的潜在冲突) - 考虑isNumber = () => /^\d+$/.test(this);代替,并用作console.log(isNumber("123123));
2021-03-16 18:36:49

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

var isNumber = /^\d+\.\d+$/.test(value);
但是,如果您不使用浮点数而不是 int,它可能会使用“?”返回 false。在“.\”解决了这个问题之后。我建议这个 /^\d+[\.,\,]?\d+$/.test(value) 允许逗号和小数点(以后可能可以将逗号转换为点)
2021-03-16 18:36:49
自 2009 年以来,这个问题一直在询问如何验证字符串是否仅包含数字。这篇文章是对另一个问题的正确答案。
2021-03-18 18:36:49
关闭: var isNumber = /^\d*\.?\d+$/.test(value)-- 匹配 '3.5', '.5', '3' -- 不匹配 '3.'
2021-03-31 18:36:49
@Lucke,您建议的正则表达式只能找到小数点或大于 9 的数字。如果将第一个更改\d+\d*?,它将能够匹配 0 - 9 以及 .333 等数字
2021-04-08 18:36:49

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

此方法的工作原理是使用扩展运算符将字符串拆分为数组,然后使用该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

这比 Regex 更容易阅读,并且很容易扩展到其他方法。在 TypeScript 中使用并与长度检查结合使用时,这会非常优雅。
2021-04-04 18:36:49
这也将返回true空字符串''和空数组[],一个整数数组[1, 2, 3](一旦它们<10)。它比/^\d+$/我认为的基本正则表达式更容易出现错误/误用
2021-04-10 18:36:49