正则表达式验证电话号码

时间:2014-11-05 11:19:01

标签: php regex validation phone-number

帮助我为以下条件编写正则表达式

  1. 号码可以以+
  2. 开头
  3. 号码可以包含 - 或。但不是()和/
  4. 号码可以从0
  5. 开始
  6. 字符串中的最小数字应为9位数,不包括扩展名详细信息并且开始+
  7. 电话号码字段中的最大号码不应超过14,不包括+
  8. 如果字符串包含ex / ext / x,则后面的数字不应超过5个字符(通常为4)
  9. 以上这个应该满足下面的例子

    0-1234-123456
    +91-1234-56789012
    +91-1234-56789012 x1234
    +91-1234-56789012 ex1234
    +91-1234-56789012 ext12345
    +91-1234-56789012x1234
    +91-1234-56789012ex1234
    +91-1234-56789012ext12345
    91-1234-56789012
    91-1234-56789012 x1234
    91-1234-56789012 ex1234
    91-1234-56789012 ext12345
    91-1234-56789012x1234
    91-1234-56789012ex1234
    91-1234-56789012ext12345
    91123456789012
    91123456789012 x1234
    91123456789012 ex1234
    91123456789012 ext12345
    91123456789012x1234
    91123456789012ex1234
    91123456789012ext12345
    91.1234.56789012
    91.1234.56789012 x1234
    91.1234.56789012 ex1234
    91.12345.6789012 ext12345
    91.12345.6789012x1234
    91.12345.6789012ex1234
    91.12345.6789012ext12345
    1-234-567-8901
    1-234-567-8901 x1234
    1-234-567-8901 ext1234
    1 234 567-8901
    1.234.567.8901
    12345678901
    

    我在网上找到了一些链接,其中一个是 http://ericholmes.ca/php-phone-number-validation-revisited/

    并在stackoverflow上

    A comprehensive regex for phone number validation

    ^(?:(?:\+?1\s*(?:[.-]\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+))?$
    

    不能用于上述许多

2 个答案:

答案 0 :(得分:4)

^\+?(\d[.\- ]*){9,14}(e?xt?\d{1,5})?$

解释

  • ^断言字符串
  • 的开头
  • \+?匹配可选加号
  • (\d[.\- ]*){9,14} 9到14个单位数字,可能用空格,圆点或短划线分隔。
  • (e?xt?\d{1,5})?可选地,x可能先于e或后跟t。这些字母后面跟着1到5个数字。
  • $断言字符串
  • 的结尾

答案 1 :(得分:1)

这样做,但取决于你编程的语言(我们总是需要知道正则表达式,所以如果这对你不起作用,请回复使用的语言。我在PHP5中测试过它。)

你的条件5(手机号码中最多14个字符)似乎有误,因为你的几个例子包含16个字符(如果它们包含点或连字符)。在任何情况下,这都不会检查整个物体的总长度,因为它会进行其他长度检查;它需要第二个正则表达式,或者更好的是,事先检查字符串长度(例如在PHP中通过调用strlen)。

您可能希望在分机号码中留出空格,例如分机1234;如果是这样,在适当的地方加上\ s *。

我希望这会有所帮助。

^\+?\d[\d-\.\s]{8,15}\s?((ext|ex|x)\d{3,5})?$