如何判断 JavaScript 中的值是否为一位数字?我通常会这样做:
var valAsString = '' + val;
if (valAsString.match(/\d/) {}
说明:我指的是0、1、2、3、4、5、6、7、8、9中的一个。
此外,我的方法是否可行?我很惊讶人们为此提出了多种不同的方法。
如何判断 JavaScript 中的值是否为一位数字?我通常会这样做:
var valAsString = '' + val;
if (valAsString.match(/\d/) {}
说明:我指的是0、1、2、3、4、5、6、7、8、9中的一个。
此外,我的方法是否可行?我很惊讶人们为此提出了多种不同的方法。
/\d/
正则表达式可以在字符串的任何位置匹配一个数字,例如在字符串 "foo1"
中将匹配到 "1"
。
如果要使用正则表达式来匹配字符串中的单个数字,需要类似以下的表达式:
if (/^\d$/.test(val)) {
//..
}
请注意我正在使用建议仅用于检查字符串是否与模式匹配的test
方法,此外,test
方法内部将转换为字符串参数。function isDigit(val) {
return String(+val).charAt(0) == val;
}
String
构造函数获得一个Number
值作为参数。例如typeof +'1' == 'number';
。这个例子中的+
是一元加操作符。 - Christian C. Salvadó请确认它的字符串长度是否等于一?
if (typeof(val) === "number")
{
var valAsString = val.toString(10);
if (valAsString.length === 1) {}
}
不过,这个功能不能接受负数或带小数部分的数字。
if
语句中。 - Randy the Devvar valAsString = val.toString();
if (valAsString.length === 1) {}
你可以检查字符串是否在-10和10之间(假设你想包括负数)。这样做是最快的,但对于非整数可能不起作用,因此最好避免。
如果你确实想要包括负数,我可能会先检查数字是否为整数,然后使用类似以下的代码:
var isSingleDigitIncludingNegatives = function( arg ) {
return ((typeof(myNum)=='number') && (myNum.toString().indexOf('.')==-1)) && (( -10 < arg ) && ( arg < 10))
isSingleDigit("\t\r\n ") === true;
- Christian C. Salvadóval
已经是数字...if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
// ...
}
val = "\t"
(ASCII 9)会导致它被识别为数字。 - Randy the Devval
已经是数字”的原因。如果val
不是数字,那么测试就需要改变。OP没有明确说明val
是否为数字。 - LukeH这样怎么样:
var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);
1.23456
是一个一位数字吗? - LukeHvalAsString.match(/^\d$/)
我认为
(+val + val % 1 + 10) % 10 === val
假设您只想接受类型为number
的值,则应该这样做。
更清晰的解决方案是
typeof val === 'number' && val >>> 0 === val % 10
它可以轻松地适应包括其他类型的值。