最好的方法来判断javascript中的值是否为单个数字。我一直在做类似
的事情var valAsString = '' + val;
if (valAsString.match(/\d/) {}
澄清:我的意思是0,1,2,3,4,5,6,7,8,9
之一另外,我应该做什么工作?我很惊讶人们为此想出了多少不同的方式。
答案 0 :(得分:9)
/\d/
正则表达式将匹配字符串中任意位置的数字,例如"foo1"
中的数字将匹配"1"
。
对于regexp方法,需要这样的方法,以确保字符串包含一个数字:
if (/^\d$/.test(val)) {
//..
}
请注意,我正在使用test
方法,当您只想检查字符串是否与模式匹配时,建议使用test
方法,内部function isDigit(val) {
return String(+val).charAt(0) == val;
}
方法将转换为sting参数。
另一种简短的非正则表达式方法:
{{1}}
答案 1 :(得分:2)
嗯,检查它的字符串长度是否等于1?
if (typeof(val) === "number")
{
var valAsString = val.toString(10);
if (valAsString.length === 1) {}
}
这不会接受带有小数部分的负数或数字。
答案 2 :(得分:0)
如果您不想包含底片,这将起作用,您的解决方案也是如此。
var 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))
答案 3 :(得分:0)
假设val
已经是数字......
if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
// ...
}
答案 4 :(得分:0)
这样的事情怎么样:
var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);
答案 5 :(得分:0)
您可以使用以下正则表达式修改:
valAsString.match(/^\d$/)
答案 6 :(得分:0)
我认为
(+val + val % 1 + 10) % 10 === val
应该这样做,假设您只想接受number
类型的值。
更清洁的解决方案
typeof val === 'number' && val >>> 0 === val % 10
可轻松调整以包含其他类型的值。