JavaScript中判断一个值是否为一位数字的最佳方法是什么?

4

如何判断 JavaScript 中的值是否为一位数字?我通常会这样做:

var valAsString = '' + val;
if (valAsString.match(/\d/) {}

说明:我指的是0、1、2、3、4、5、6、7、8、9中的一个。

此外,我的方法是否可行?我很惊讶人们为此提出了多种不同的方法。


你所说的“single digit”,是指介于-10和10之间的整数吗? - Russ Cam
@russ,我的意思是我说的话,0-9之间的任何数字。这是Z的子集。 - hvgotcodes
@russ,我意识到我一开始没有表述清楚--抱歉。 - hvgotcodes
7个回答

12

/\d/ 正则表达式可以在字符串的任何位置匹配一个数字,例如在字符串 "foo1" 中将匹配到 "1"

如果要使用正则表达式来匹配字符串中的单个数字,需要类似以下的表达式:

if (/^\d$/.test(val))  {
  //..
}
请注意我正在使用建议仅用于检查字符串是否与模式匹配的test方法,此外,test方法内部将转换为字符串参数。
另一个简短的非正则表达式方法:
function isDigit(val) {
  return String(+val).charAt(0) == val;
}

1
@hvgotcodes正在进行数字类型转换。基本上是确保String构造函数获得一个Number值作为参数。例如typeof +'1' == 'number';。这个例子中的+一元加操作符 - Christian C. Salvadó

3

请确认它的字符串长度是否等于一?

if (typeof(val) === "number")
    {
    var valAsString = val.toString(10);
    if (valAsString.length === 1) {}
    }

不过,这个功能不能接受负数或带小数部分的数字。


如果您查看修订记录,您可以看到我的先前代码,如果您正在寻找更少的代码,则只有两行长。它做了同样的事情,只是将类型检查合并到其他if语句中。 - Randy the Dev

2
如果您不想包含负面内容,这将起作用,您的解决方案也是如此。
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))

类型转换可能会使事情变得复杂,例如:isSingleDigit("\t\r\n ") === true; - Christian C. Salvadó

0
假设val已经是数字...
if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
    // ...
}

val = "\t"(ASCII 9)会导致它被识别为数字。 - Randy the Dev
@Andrew:这就是我说“假设val已经是数字”的原因。如果val不是数字,那么测试就需要改变。OP没有明确说明val是否为数字。 - LukeH

0

这样怎么样:

var check = parseFloat(val);
var isSingleDigit = (!isNaN(check) && (check < 10 && check > -10) && check.toString().length ==1);

那么 1.23456 是一个一位数字吗? - LukeH
哦,你说得对。谢谢你。根据你的建议进行了编辑。 - Jage

0
您可以使用以下修改后的正则表达式:

valAsString.match(/^\d$/)


0

我认为

(+val + val % 1 + 10) % 10 === val

假设您只想接受类型为number的值,则应该这样做。

更清晰的解决方案是

typeof val === 'number' && val >>> 0 === val % 10

它可以轻松地适应包括其他类型的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接