检查字符串是不是仅包含数字
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 = () => /^\d+$/.test(this);
,并用作 console.log(isNumber("123123));
FWIW,在 2009 年发布此答案时,尚未将其视为不好的做法。当时存在的几个 jQuery 竞争对手,在 jQuery 尚未获胜之前,都在实践原型扩展。【参考方案13】:
string.match(/^[0-9]+$/) != null;
【讨论】:
【参考方案14】:嗯,你可以使用下面的正则表达式:
^\d+$
【讨论】:
以上是关于检查字符串是不是仅包含数字的主要内容,如果未能解决你的问题,请参考以下文章
如何检查给定的 c++ 字符串或 char* 是不是仅包含数字?