【问题标题】:javascript, best way to tell if a val is a single digitjavascript,判断 val 是否为单个数字的最佳方法
【发布时间】:2010-10-01 23:24:55
【问题描述】:

判断 javascript 中的值是否为单个数字的最佳方法是什么。我一直在做类似的事情

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

澄清:我的意思是 0,1,2,3,4,5,6,7,8,9 之一

另外,我应该有什么工作吗?我很惊讶人们为此想出了多少不同的方法。

【问题讨论】:

  • 个位数,你的意思是-10到10之间的整数?
  • @russ,我的意思是我所说的,0-9 之间的任何数字。这是 Z 的一个子集。
  • @russ,我意识到我没有事先说明清楚——抱歉。

标签: javascript regex digits


【解决方案1】:

/\d/ 正则表达式将匹配字符串中任意位置的数字,例如 "foo1" 将匹配 "1"

对于正则表达式方法需要这样的东西,以确保字符串包含单个数字:

if (/^\d$/.test(val))  {
  //..
}

请注意,我使用的是test 方法,当您只想检查字符串是否与模式匹配时建议使用该方法,此外,test 方法在内部将转换为参数。

另一种简短的非正则表达式方法:

function isDigit(val) {
  return String(+val).charAt(0) == val;
}

【讨论】:

  • @hvgotcodes,正在将类型转换为数字。它基本上是确保String 构造函数获得Number 值作为参数。例如typeof +'1' == 'number';+ 在这个例子中是unary plus operator
【解决方案2】:

嗯,看看它的字符串长度是否等于1?

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

这不会接受负数或带有小数部分的数字。

【讨论】:

  • 如果您查看修订版,您可以看到我之前的代码,如果您正在寻找更少的代码,那么它只有 2 行长。它做了同样的事情,只是将类型检查合并到另一个 if 语句中。
【解决方案3】:

如果您不想包含否定,这将起作用,您的解决方案也将如此。

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;
【解决方案4】:

假设val 已经是数字...

if ((val >= 0) && (val < 10) && (Math.floor(val) == val)) {
    // ...
}

【讨论】:

  • val = "\t" (ASCII 9) 将使其识别为数字。
  • @Andrew:这就是为什么我说“假设val 已经是数字”。如果val 不是数字,则需要更改测试。 OP 不清楚 val 是否为数字。
【解决方案5】:

您可以对正则表达式进行以下修改:

valAsString.match(/^\d$/)

【讨论】:

    【解决方案6】:

    我认为

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

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

    更清洁的解决方案是

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

    它可以很容易地适应包含其他类型的值。

    【讨论】:

      【解决方案7】:

      这样的事情怎么样:

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

      【讨论】:

      • 1.23456 是个位数吗?
      • 哦,你是对的。谢谢你。根据您的建议进行了编辑。
      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 2021-03-20
      相关资源
      最近更新 更多