帮助我为以下条件编写正则表达式
以上这个应该满足下面的例子
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+))?$
不能用于上述许多
答案 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})?$