我正在使用此正则表达式验证电话号码:
^(\\([2-9]\\d{2}\\)|[2-9]\\d{2})[- ]?\\d{3}[- ]?\\d{4}$
但是,当我测试没有短划线或空格的任何10位数电话号码的输入时,例如4042128246
,数字不匹配。
如何改进此正则表达式以接受此输入? 感谢。
答案 0 :(得分:2)
我建议剥离所有非数字,然后检查你剩下的10位数字。鉴于此,您可以将其存储在一个通用(即很好的规范化)格式中,然后在显示层中稍后更改格式。 (在你想要显示破折号和/或parens的情况下。)
答案 1 :(得分:0)
你确定需要逃避反斜杠吗?
这适用于.NET环境:
^(\([2-9]\d{2}\)|[2-9]\d{2})[- ]?\d{3}[- ]?\d{4}$
答案 2 :(得分:0)
我在JavaScript中尝试时匹配。也许这是你使用的语言不支持所有相同选项的结果。
答案 3 :(得分:0)
在PowerShell中为我工作。但是从那些在电信行业工作的人那里接受它 - 使用代码而不是正则表达式解析电话号码是个好主意,假设你的情况并不严格要求正则表达式。
正如Alex Howansky所说,最好的办法是对你接受的东西非常宽容,然后删除所有()的, - 和空格。然后将号码存储为数字。您永远不必担心在需要保留的电话号码中领先0。 (国际拨号代码使用前导零,但这不是电话号码的一部分。)
值得注意的是,尽管我不知道任何以0或1开头的有效交换,但除了传统的7位拨号计划外,没有什么能够禁止它。因此,转换为64位整数后检查有效NANP电话号码的最简单方法是:
value >= 2000000000 && value <= 9999999999