我需要添加一个正则表达式,匹配所有可能的有效 E.164 格式的电话号码。
这个正则表达式对于北美电话号码来说效果很好,但我需要一个也能适用于国际号码的正则表达式:
^(+1|1)?([2-9]\d\d[2-9]\d{6})$
例如: +13172222222 匹配成功 13172222222 也匹配成功,因为 +1 或者 1 是可选的 3172222222 也匹配成功,因为 +1 或者 1 是可选的 3171222222 不匹配,不是有效的 NANPA 号码。
来源: Freeswitch.org
我还遇到了这个相关问题,但我认为它对我来说太复杂了。在我的情况下,我只是验证一个黑名单条目,将其与 Twilio 的传入数据进行比较;因此,我对国家代码是否有效并不关心。我实际上只需要测试一个号码是否与通用的E.164格式匹配,而不是假设它是一个 NANPA。
为了更好地理解我需要匹配什么,这里有一个来自Twilio 文档的示例:
如果可能,Twilio 请求中的所有电话号码都是以 E.164格式。例如,(415) 555-4345 会以'+14155554345' 的形式传送。但是,有时 Twilio 无法将传入的呼叫者 ID 标准化为 E.164。在这些情况下,Twilio 将报告原始的呼叫者 ID 字符串。
我希望匹配类似于+14155554345的内容,但不包括(415) 555-4345、415555434、555-4345或5554345。正则表达式不应该限制只匹配美国国家代码。基本上,它应该匹配+xxxxxxxxxxx格式。我认为号码可能会更长,因为在英国等国家有多位数字的国家代码。T-Mobile的英国号码是+447953966150,如果我能想到更好的例子,我会更新此内容。
\+
转义第一个+
)。^(\+1|1)?([2-9]\d\d[2-9]\d{6})$
- agent-j