【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我正在尝试综合使用正则表达式来验证电话号码。 理想情况下,它将处理国际格式,但必须处理美国格式,包括以下内容:
- 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楼
这是在JavaScript中效果很好的一种。 它在字符串中,因为这就是Dojo小部件所期望的。
它与带有可选扩展名的10位北美NANP号匹配。 空格,破折号和句点是可接受的定界符。
"^(\\(?\\d\\d\\d\\)?)( |-|\\.)?\\d\\d\\d( |-|\\.)?\\d{4,4}(( |-|\\.)?[ext\\.]+ ?\\d+)?$"
#2楼
我一直在同一个问题上挣扎,试图使我的应用程序成为未来的证明,但是这些家伙让我朝着正确的方向前进。 我实际上不是在检查数字本身是否有用,我只是在尝试确保输入的一系列数字可能有扩展名,也可能没有扩展名。
最糟糕的情况是,如果用户不得不从XML文件中提取未格式化的号码,那么他们仍然只会在电话的数字键盘012345678x5
键入数字,没有真正的理由保持美观。 这种RegEx对我来说会是这样的:
\d+ ?\w{0,9} ?\d+
-
01234467 extension 123456
-
01234567x123456
-
01234567890
#3楼
对格式字符进行替换,然后检查其余字符的电话有效性。 在PHP中,
$replace = array( ' ', '-', '/', '(', ')', ',', '.' ); //etc; as needed
preg_match( '/1?[0-9]{10}((ext|x)[0-9]{1,4})?/i', str_replace( $replace, '', $phone_num );
这样破坏一个复杂的正则表达式可能同样有效,但更为简单。
#4楼
如果您只是想验证自己在该字段中没有随机垃圾(即来自垃圾邮件发送者),则此正则表达式应该做得很好:
^[0-9+\(\)#\.\s\/ext-]+$
请注意,对于多少个数字或这些数字中有效的数字没有任何特殊的规则,它仅验证仅数字,括号,破折号,加号,空格,磅,星号,句点,逗号或字母e
, x
, t
存在。
它应该与国际号码和本地化格式兼容。 您预见到某些区域是否需要使用方括号,大括号或尖括号? (当前不包括在内)。
如果您想维持每位数字的规则(例如美国区号和前缀(交换码)必须在200-999范围内),请祝您好运。 维持一个复杂的规则集,这在世界上任何国家将来都可能会过时,这听起来并不有趣。
而且,尽管剥离所有/大多数非数字字符在服务器端可能效果很好(尤其是如果您打算将这些值传递给拨号程序),但您可能不希望在验证期间破坏用户的输入,尤其是如果您希望它们在另一个领域进行更正。
#5楼
到目前为止,这是我最好的尝试。 它处理上面的格式,但是我确定我缺少其他可能的格式。
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3143330