【问题标题】:How to modify regex for phone numbers and accept only digits如何修改电话号码的正则表达式并只接受数字
【发布时间】:2011-09-01 15:08:53
【问题描述】:

我有以下用于 jquery 验证插件的正则表达式方法。

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, ""); 
    return this.optional(element) || phone_number.length > 9 &&
        phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

目前,它以这种格式验证电话号码:203-123-1234

我需要更改为这样验证:2031231234

有没有人可以为我提供快速简便的解决方案?

【问题讨论】:

    标签: javascript jquery regex phone-number


    【解决方案1】:

    你可以替换

    phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
    

    有了这个

    phone_number.match(/\d{10}/);
    

    \d 表示匹配任意数字

    {10}表示10次

    【讨论】:

    • 某些字符的 2-9 约束发生了什么?
    • 谢谢,这似乎是最简单的方法。我已经在输入框中将字段限制为 10 个数字 - 但是当客户没有输入足够的字符时,这会给他们一个消息。
    • 什么是 2-9 约束?
    • @jrutter ...在您的原始正则表达式中,它仅根据[2-9]s 验证每个部分中的数字2-9作为第一个数字。不确定您是否需要,在您的 203-123-1234 示例中给出 123。如果你只需要验证 10 个数字,不管#s,你可以使用我给出的答案。
    • @jrutter,2-9 约束是您原始正则表达式中的 [2-9] 位。那里有两个地方不允许使用1 数字(在可选的- 字符之后),这使得\d{10} 正则表达式作为替换无效,因为它允许将1 放置在任何地方。
    【解决方案2】:

    摆脱所有这些 -? 序列可能是最快的方法 - 它们意味着零个或一个 - 字符。

    这将减少到:

    /^(1)?(\([2-9]\d{2}\)|[2-9]\d{2})[2-9]\d{2}\d{4}$/
    

    可以进一步简化为:

    /^1?(\([2-9]\d{2}\)|[2-9]\d{2})[2-9]\d{6}$/
    

    如果您还想禁止区号周围的括号,您可以进一步简化为:

    /^1?[2-9]\d{2}[2-9]\d{6}$/
    

    (而且,从技术上讲,它与文字 203-123-1234 不匹配,因为紧跟在第一个 - 之后的字符必须是 2 到 9,所以我假设您只是在谈论 格式 而不是那里的值)。

    【讨论】:

    • 什么是2-9约束?
    • @jrutter,请参阅我对杰森回答的评论。一个简单的\d{10} 不等同于您拥有的正则表达式,因为某些位置不允许为1
    【解决方案3】:

    我认为更好的方法是用更简单的版本改变整个表达式,如下所示:

    /^[0-9]{10}$/
    

    已编辑,注释(见 cmets):

    这只是如何验证格式的一个有限示例:111-222-3333 与 1112223333,不是正确的美国电话号码验证。

    【讨论】:

    • 这不会尊重某些字符的 2-9 限制,你知道吗?这对 OP 来说可能不是问题,但您应该注意这一点。
    • 你说得对,感谢您指出。我应该对此更直接。我会修改一个帖子。这个例子是关于如何验证格式:111-222-3333 vs 1112223333。
    【解决方案4】:

    如果你只想要十位数,那么

    phone_number.match(/\d{10}/)

    会做的。如果您想匹配其中的任何其他条件(例如同时匹配 1-2031231234 和 2031231234),则需要添加更多。

    附带说明一下,您当前拥有的内容与 203-123-1234 不匹配,因为第一个连字符后的第一个数字是 1,它在该位置寻找 2-9。

    【讨论】:

      【解决方案5】:
      ([0-9]{10}) this will match with 10 digit number.
      

      【讨论】:

        【解决方案6】:

        如果要匹配所有格式,可以使用,包括 203-123-1234 和 2031231234

        编辑:我不是正则表达式专家,但我添加了“1-”支持

        /^(?:1-?)?[(]?\d{3}[)]?\s?-?\s?\d{3}\s?-?\s?\d{4}$/
        

        顺便说一句,有一个非常棒的 AIR 正则表达式工具,它叫做 RegExr,你可以在这里获得桌面版本 http://www.gskinner.com/RegExr/desktop/ 或使用在线版本 http://gskinner.com/RegExr/ 。还有一个“社区”部分,其中包含许多有用的工作正则表达式。那是我拿那个的地方。

        【讨论】:

        • 不会像原来那样匹配 1-(800)-222-3333 :-)
        • 对!我添加了对它的支持。虽然经过了粗略的测试
        猜你喜欢
        • 2013-08-05
        • 2017-09-23
        • 2014-02-15
        • 1970-01-01
        • 2016-02-02
        相关资源
        最近更新 更多