我正在尝试综合使用正则表达式来验证电话号码。 理想状况下,它将处理国际格式,但必须处理美国格式,包括如下内容: 正则表达式
我会以目前的尝试回答,但我但愿有人能作得更好和/或更优雅。 服务器
这是在JavaScript中效果很好的一种。 它在字符串中,由于这就是Dojo小部件所指望的。 spa
它与带有可选扩展名的10位北美NANP号匹配。 空格,破折号和句点是可接受的定界符。 code
"^(\\(?\\d\\d\\d\\)?)( |-|\\.)?\\d\\d\\d( |-|\\.)?\\d{4,4}(( |-|\\.)?[ext\\.]+ ?\\d+)?$"
我一直在同一个问题上挣扎,试图使个人应用程序成为将来的证实,可是这些家伙让我朝着正确的方向前进。 我实际上不是在检查数字自己是否有用,我只是在尝试确保输入的一系列数字可能有扩展名,也可能没有扩展名。 ip
最糟糕的状况是,若是用户不得不从XML文件中提取未格式化的号码,那么他们仍然只会在电话的数字键盘012345678x5
键入数字,没有真正的理由保持美观。 这种RegEx对我来讲会是这样的: 字符串
\d+ ?\w{0,9} ?\d+
01234467 extension 123456
01234567x123456
01234567890
对格式字符进行替换,而后检查其他字符的电话有效性。 在PHP中, io
$replace = array( ' ', '-', '/', '(', ')', ',', '.' ); //etc; as needed preg_match( '/1?[0-9]{10}((ext|x)[0-9]{1,4})?/i', str_replace( $replace, '', $phone_num );
这样破坏一个复杂的正则表达式可能一样有效,但更为简单。 服务器端
若是您只是想验证本身在该字段中没有随机垃圾(即来自垃圾邮件发送者),则此正则表达式应该作得很好: 扩展
^[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}))?$