一个全面的电话号码验证正则表达式

我正在尝试整理一个综合的正则表达式来验证电话号码。 理想情况下,它将处理国际格式,但它必须处理美国格式,包括以下格式:

  • 1-234-567-8901
  • 1-234-567-8901 x1234
  • 1-234-567-8901 ext1234
  • 1(234)567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901
  • 我会回答我目前的尝试,但我希望有人有更好的和/或更优雅的东西。


    更好的选择...只需在输入中除去所有非数字字符(除了'x'和前导'+'符号),请注意,因为英国人倾向于以非标准形式+44 (0) ...写数字+44 (0) ...当记者问到使用国际长途码(在特定情况下,应该丢弃(0)完全)。

    然后,你最终得到的值如下:

     12345678901
     12345678901x1234
     345678901x1234
     12344678901
     12345678901
     12345678901
     12345678901
     +4112345678
     +441234567890
    

    然后当你展示时,重新格式化你的内心。 例如

      1 (234) 567-8901
      1 (234) 567-8901 x1234
    

    事实证明,对此有一些规范,至少在北美,称为NANP。

    你需要明确指定你想要的。 什么是合法分隔符? 空格,破折号和句点? 没有分隔符允许? 是否可以混合使用分隔符(例如,+ 0.111-222.3333)? 扩展名(例如111-222-3333 x 44444)将如何处理? 特殊数字如911怎么样? 地区代码是可选的还是必需的?

    这是一个7或10位数字的正则表达式,允许扩展名,分隔符是空格,破折号或句点:

    ^(?:(?:+?1s*(?:[.-]s*)?)?(?:(s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))s*(?:[.-]s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})s*(?:[.-]s*)?([0-9]{4})(?:s*(?:#|x.?|ext.?|extension)s*(d+))?$
    

    .*
    

    如果用户想给你他的电话号码,那么请相信他是正确的。 如果他不想给你,然后强迫他输入一个有效的数字,可以将他送到竞争对手的网站或让他输入一个随机字符串,以适应你的正则表达式。 我甚至可能会想要查看保费率性别线的数量,然后输入。

    我还会在网站上考虑以下任何有效条目:

    "123 456 7890 until 6pm, then 098 765 4321"  
    "123 456 7890 or try my mobile on 098 765 4321"  
    "ex-directory - mind your own business"
    
    链接地址: http://www.djcxy.com/p/30565.html

    上一篇: A comprehensive regex for phone number validation

    下一篇: ListView and onItemClick create transparent fragment