我试图把一个全面的正则表达式放在一起来验证电话号码。理想情况下,它可以处理国际格式,但它必须处理美国格式,包括以下内容:
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
我会用我目前的尝试来回答,但我希望有人有更好的和/或更优雅的东西。
我试图把一个全面的正则表达式放在一起来验证电话号码。理想情况下,它可以处理国际格式,但它必须处理美国格式,包括以下内容:
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)写数字……当要求使用国际前缀时(在这种特定情况下,应该完全丢弃(0))。
然后,你会得到这样的值:
12345678901
12345678901x1234
345678901x1234
12344678901
12345678901
12345678901
12345678901
+4112345678
+441234567890
然后,当你显示,重新格式化为您的心脏内容。如。
1 (234) 567-8901
1 (234) 567-8901 x1234
其他回答
我写得最简单(虽然我不需要点)。
^([0-9\(\)\/\+ \-]*)$
正如下面提到的,它只检查字符,而不检查其结构/顺序
如果你只是想验证你在字段中没有随机垃圾(即来自表单垃圾邮件者),这个正则表达式应该做得很好:
^[0-9+\(\)#\.\s\/ext-]+$
请注意,它没有任何特殊的规则来说明有多少位数字,或者这些数字中哪些数字是有效的,它只是验证只有数字、括号、破折号、加号、空格、磅、星号、句号、逗号或字母e、x、t存在。
它应该与国际数字和本地化格式兼容。你认为某些区域需要使用方括号、花括号或尖括号吗?(目前他们不包括在内)。
如果你想保持每个数字的规则(比如美国区域代码和前缀(交换码)必须在200-999之间),那么祝你好运。维护一个复杂的规则集,在未来任何时候世界上任何国家都可能过时,这听起来并不有趣。
虽然剥离所有/大多数非数字字符在服务器端可能工作得很好(特别是如果您计划将这些值传递给拨号器),但您可能不希望在验证期间打乱用户的输入,特别是如果您希望他们在另一个字段中进行更正。
这是我目前为止最好的尝试。它处理上面的格式,但我确信我错过了一些其他可能的格式。
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$
我尝试使用一个无限制的正则表达式:
/^[+#*\(\)\[\]]*([0-9][ ext+-pw#*\(\)\[\]]*){6,45}$/
接受:
+(01) 123 (456) 789 ext555
123456
*44 123-456-789 [321]
123456
123456789012345678901234567890123456789012345
*****++[](][((( 123456tteexxttppww
拒绝:
mob 07777 777777
1234 567 890 after 5pm
john smith
(empty)
1234567890123456789012345678901234567890123456
911
它是由你来消毒展示。经过验证,它可能是一个数字。
请注意,剥离()字符不适用于常见的英国号码的书写风格:+44(0)1234 567890,这意味着可以拨打国际号码: + 441234567890 或在英国拨打01234567890