【发布时间】:2011-09-22 15:51:10
【问题描述】:
我需要添加一个匹配所有可能的有效 E.164 格式电话号码的正则表达式。
这个正则表达式适用于北美电话号码,但我需要一些适用于国际号码的东西:
^(+1|1)?([2-9]\d\d[2-9]\d{6})$
示例:+13172222222 匹配 13172222222 仍然匹配,因为 +1 或 1 是可选的 3172222222 仍然匹配,因为 +1 或 1 是可选的 3171222222 不匹配且不是有效的 NANPA 编号。
我也遇到了this related question,但我认为这对我的需求来说太疯狂了。就我而言,我只是验证黑名单的条目,我将其与传入的 Twilio 数据进行比较;所以,我不太关心国家代码是否有效的天气。我真的只需要测试一个数字是否与一般的E.164 形式匹配,而不是假设它是 NANPA。
为了更好地理解我需要匹配的内容,这里有一个来自Twilio Documentation 的示例:
请求中的所有电话号码来自 Twilio 是 E.164 格式,如果 可能的。例如,(415) 555-4345 将以“+14155554345”的形式出现。 不过也有偶尔的情况 Twilio 无法规范化 来电显示到 E.164。在这些 情况 Twilio 将报告原始 来电显示字符串。
我想匹配 +14155554345 之类的内容,但不匹配 (415) 555-4345、415555434、555-4345 或 5554345。不过,正则表达式不应仅限于匹配美国国家/地区代码。基本上,它应该匹配 +xxxxxxxxxxx 格式。我还认为这个数字可能会更长,因为有多位数的国家代码,例如在英国。 T-Mobile 的英国号码是 +447953966150,如果我能想出更好的例子,我会更新这个。
【问题讨论】:
-
我注意到,当您提供您尝试匹配的内容的示例时,人们最愿意提供帮助...至少解释一下您知道如何匹配的输入与输入你没有。
-
抱歉,我花了这么长时间才找到一个例子。我找不到任何关于 E.164 格式的明确文档,所以我在其中包含了 Twilio 简介。
-
这些看起来仍然像美国的电话号码。 Freeswich.org 的正则表达式匹配你 +14155554345 的那个(好吧,如果你用
\+转义第一个+)。^(\+1|1)?([2-9]\d\d[2-9]\d{6})$ -
@agent-j 我添加了一个英国的例子。
-
对我来说,棘手的部分是扩展......如果他们输入“+1 (999)-999-999 分机 191”或“11 99 8888 8888 分机 9909”怎么办?
标签: regex