我试图把一个全面的正则表达式放在一起来验证电话号码。理想情况下,它可以处理国际格式,但它必须处理美国格式,包括以下内容:

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

我会用我目前的尝试来回答,但我希望有人有更好的和/或更优雅的东西。


当前回答

我也在为同样的问题而挣扎,试图让我的应用程序经得起未来的考验,但这些人让我走上了正确的方向。我实际上并不是在检查数字本身,看它是否有效,我只是试图确保输入的一系列数字可能有或没有扩展名。

最坏的情况是,如果用户必须从XML文件中提取一个未格式化的数字,他们仍然只是将数字输入到手机的数字pad 012345678x5中,没有真正的理由保持它的美观。这种RegEx对我来说是这样的:

\d+ ?\w{0,9} ?\d+

01234467分机号123456 01234567 x123456 01234567890

其他回答

    pattern="^[\d|\+|\(]+[\)|\d|\s|-]*[\d]$" 
    validateat="onsubmit"

必须以数字结尾,可以以(或+或数字开头,并且可以包含+ -(或)

如果你只是想验证你在字段中没有随机垃圾(即来自表单垃圾邮件者),这个正则表达式应该做得很好:

^[0-9+\(\)#\.\s\/ext-]+$

请注意,它没有任何特殊的规则来说明有多少位数字,或者这些数字中哪些数字是有效的,它只是验证只有数字、括号、破折号、加号、空格、磅、星号、句号、逗号或字母e、x、t存在。

它应该与国际数字和本地化格式兼容。你认为某些区域需要使用方括号、花括号或尖括号吗?(目前他们不包括在内)。

如果你想保持每个数字的规则(比如美国区域代码和前缀(交换码)必须在200-999之间),那么祝你好运。维护一个复杂的规则集,在未来任何时候世界上任何国家都可能过时,这听起来并不有趣。

虽然剥离所有/大多数非数字字符在服务器端可能工作得很好(特别是如果您计划将这些值传递给拨号器),但您可能不希望在验证期间打乱用户的输入,特别是如果您希望他们在另一个字段中进行更正。

这是一个简单的菲律宾手机号码的正则表达式模式:

((\+[0-9]{2})|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

or

((\+63)|0)[.\- ]?9[0-9]{2}[.\- ]?[0-9]{3}[.\- ]?[0-9]{4}

将匹配这些:

+63.917.123.4567  
+63-917-123-4567  
+63 917 123 4567  
+639171234567  
09171234567  

第一个将匹配任何两位数的国家代码,而第二个将匹配菲律宾国家代码。

在这里测试:http://refiddle.com/1ox

事实上,至少在北美,有一个叫做NANP的规范。

你需要明确地说明你想要什么。什么是合法的分隔符?空格、破折号和句号?不允许分隔符?是否可以混合使用分隔符(例如+0.111-222.3333)?扩展(例如,111-222-3333 x 44444)将如何处理?那特殊的号码呢,比如911?区号是可选的还是必须的?

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

^(?:(?:\+?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+))?$

我也在为同样的问题而挣扎,试图让我的应用程序经得起未来的考验,但这些人让我走上了正确的方向。我实际上并不是在检查数字本身,看它是否有效,我只是试图确保输入的一系列数字可能有或没有扩展名。

最坏的情况是,如果用户必须从XML文件中提取一个未格式化的数字,他们仍然只是将数字输入到手机的数字pad 012345678x5中,没有真正的理由保持它的美观。这种RegEx对我来说是这样的:

\d+ ?\w{0,9} ?\d+

01234467分机号123456 01234567 x123456 01234567890