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

Posted

技术标签:

【中文标题】检查字符串是不是仅包含数字【英文标题】:Check if string contains only digits检查字符串是否仅包含数字 【发布时间】:2010-12-19 05:42:54 【问题描述】:

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

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

if (isANumber)
    ..

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

【问题讨论】:

【参考方案1】:

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

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


isdigit("10")//true
isdigit("any String")//false

【讨论】:

0 为假 对于 0x123 将是真的:/ 任何末尾有空格的数字都会计算为真【参考方案2】:

如果您需要整数和浮点数同时验证

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

【讨论】:

自 2009 年以来,这个问题一直在询问如何验证字符串是否仅包含数字。这篇文章是对另一个问题的正确答案。【参考方案3】:

如果你使用 jQuery:

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

【讨论】:

【参考方案4】:

怎么样

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

【讨论】:

这太棒了!我很好奇 \d 不是指十进制的数字吗? @dewwwald:有些语言实现它的方式不同,但在 javascript 中,\d完全等同于 [0-9] Here 您可以找到有关Regular Expressions 工作原理的文档 /^\d*$/ 改为,如果您发现仅包含数字的空字符串。 @DrorBar 很抱歉我的英语很差,让我改写一下:“如果您认为空字符串只有数字。”【参考方案5】:

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

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。所以我建议的解决方案是反转 theValue 所以 .1 将是 1。那么相同的正则表达式将不允许它。

例子:

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

【讨论】:

自 2009 年以来,这个问题一直在询问如何验证字符串是否仅包含数字。这篇文章是对另一个问题的正确答案。【参考方案6】:
c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

这也将返回空字符串''true,以及一个空数组[],一个整数数组[1, 2, 3](一旦它们小于10)。我认为它比基本正则表达式/^\d+$/ 更容易出现错误/误用 这比正则表达式更容易阅读,并且很容易扩展到其他方法。在 TypeScript 中使用时,与长度检查结合使用时,这会非常优雅。【参考方案8】:
function isNumeric(x) 
    return parseFloat(x).toString() === x.toString();

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

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

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

【讨论】:

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

这就是你想要的

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

【讨论】:

这个答案允许空字符串作为有效数字传递。【参考方案12】:
String.prototype.isNumber = function()return /^\d+$/.test(this);
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

【讨论】:

在 Javascript 中修改内置对象的原型被认为是不好的做法(原则是最少意外,以及未来 ECMA 版本中的潜在冲突) - 改为考虑 isNumber = () =&gt; /^\d+$/.test(this);,并用作 console.log(isNumber("123123)); FWIW,在 2009 年发布此答案时,尚未将其视为不好的做法。当时存在的几个 jQuery 竞争对手,在 jQuery 尚未获胜之前,都在实践原型扩展。【参考方案13】:
string.match(/^[0-9]+$/) != null;

【讨论】:

【参考方案14】:

嗯,你可以使用下面的正则表达式:

^\d+$

【讨论】:

以上是关于检查字符串是不是仅包含数字的主要内容,如果未能解决你的问题,请参考以下文章

如何检查给定的 c++ 字符串或 char* 是不是仅包含数字?

检查字符串是不是包含字母数字

检查字符串是不是仅包含特定字符? [复制]

检查输入字符串是不是包含javascript中的数字

Python/FLASK - html 表单返回字符串。如何检查它是不是包含数字?

用于检查字符串是不是严格字母数字的正则表达式