【问题标题】:Check if a string starts with a number in range检查字符串是否以范围内的数字开头
【发布时间】:2016-05-02 20:20:01
【问题描述】:

我有一个可以是随机长度的字符串,我需要检查它是否满足以下条件:

  • 以 4 位数字开头
  • 前 4 位数字构成 2221-2720 范围内的数字(信用卡号)

现在我有以下代码:

var isCardNumber = function (myString)
{
    var num = parseInt(myString.substr(0, 4));
    if(num) {
        return num >= 2221 && num <= 2720;
    };
    return false;
};

这可以做得更简单/更短吗?可能使用正则表达式?

【问题讨论】:

  • 可以使用正则表达式,但你所拥有的更干净。
  • 这是Code Review的问题
  • 我投票决定将此问题作为题外话结束,因为它应该发布在Code review
  • 应该在code review。 PS if 块完全是多余的:return num &gt;= 2221 &amp;&amp; num &lt;= 2720return false 语句一样。

标签: javascript regex string-parsing


【解决方案1】:

这是您的一般文化的正则表达式。正如其他人所说,我不建议使用它。您可以进行性能测试,但我希望它比整数比较测试要慢。

^2(2[2-9]\d|[3-6]\d\d|7([0-1]\d|2[0-1]))

要构造这种正则表达式,您需要将范围分解为易于表示的字符串; 2221-2720 是:

  • 2220 到 2299 (22[2-9]\d)
  • 2300 到 2699 (2[3-6]\d\d)
  • 2700 到 2719 (27[0-1]\d)
  • 2720 到 2721 (272[0-1])

然后你可以像我一样分解它,或者直接使用它,每个片段用|分隔。

【讨论】:

    【解决方案2】:
    var isCardNumber = function ( cardNumber ) {
       var n = +cardNumber.substr( 0, 4 )
       return n && n > 2220 && n < 2721
    }
    

    【讨论】:

    • 初始 n &amp;&amp; 是多余的,因为对于任何虚假值 nn &gt; 2220 也将返回 false。
    • 毫无疑问,这不是必需的,但我想它会比比较 n 和数字更快
    • 我认为速度或多或少是相同的(当然只有测试会告诉我们),因为如果左手表达式是 NaN 那么&lt; 立即返回 undefined并且表达式返回 false。我只是评论冗余操作。
    猜你喜欢
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    • 2023-02-21
    • 2012-02-06
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多