正则表达式匹配E.164格式的电话号码

时间:2011-06-25 16:01:30

标签: regex

我需要添加一个匹配所有可能的有效E.164格式电话号码的正则表达式。

此正则表达式适用于北美电话号码,但我需要一些适用于国际号码的内容:

  

^(+ 1 | 1)〜([2-9] \ d \ d [2-9] \ d {6})$

     

示例:+13172222222匹配            13172222222仍然匹配,因为+1或1是可选的            3172222222仍然匹配,因为+1或1是可选的            3171222222不匹配且不是有效的NANPA编号。

来源:Freeswitch.org

我也遇到了this related question,但我认为这对我的需求来说太疯狂了。就我而言,我只是在验证黑名单的条目,我将其与传入的Twilio数据进行比较;所以,我更关心国家代码有效的天气。我真的只需要测试一个数字是否与一般的E.164形式相匹配,而不是假设它是一个NANPA。

为了更好地理解我需要匹配的内容,以下是Twilio Documentation

中的示例
  

请求中的所有电话号码   如果,Twilio是E.164格式   可能。例如,(415)555-4345   会以'+14155554345'的形式出现。   但是,偶尔会出现这种情况   Twilio无法正常化的地方   传入的来电显示为E.164。在这些   情况Twilio将报告原始   来电显示字符串。

我希望匹配+14155554345,但不匹配(415)555-4345,4155555434,555-4345或5554345.正则表达式不应仅限于匹配美国国家/地区代码。基本上,它应该与+ xxxxxxxxxxx格式匹配。我还认为这个数字可能会更长,因为有多位数的国家/地区代码,例如在英国。 T-Mobile的英国号码是+447953966150如果我能想出一个更好的例子,我会更新这个。

8 个答案:

答案 0 :(得分:82)

接受的答案是好的,但E.164号码最多可以有15位数字。规范也没有说明最低限度,因此我不一定指望10。

应为^\+?[1-9]\d{1,14}$

请参阅http://en.wikipedia.org/wiki/E.164

答案 1 :(得分:14)

我认为,除非你有一套很好的例子,否则最好是灵活的正则表达式。这个匹配+后跟10-14位数。

^\+?\d{10,14}$

细分,这个表达意味着: ^匹配字符串的开头。 \+?可选择匹配+符号。 \d{10,14}匹配10到14位数字。 $确保我们位于字符串的末尾。

如果你知道特定索引处的数字不能是1或0,那么你可以在那个位置使用[2-9],如下所示:

^\+?\d{6,7}[2-9]\d{3}$

[2-9]表示匹配2到9之间的任何数字(不匹配0或1。)

答案 2 :(得分:1)

这仅匹配+1617455221116174552211

等格式
/\A\+?\d{11}\z/

如果您使用Twilio和Ruby on Rails

,它尤其有用

答案 3 :(得分:0)

您提供的正则表达式应该有效,但初始+需要转义。

/^(\+1|1)?[2-9]\d\d[2-9]\d{6}$/g

看到它在工作 http://refiddle.com/19x

答案 4 :(得分:0)

好吧,我使用了接受的答案,但在很多情况下失败了:

对于以下输入:

  • 数字不以“+”开头。
  • 数量小于9的情况。

正则表达式失败了。

我终于使用了

^\+(?:[0-9]?){6,14}[0-9]$

这就像魅力一样!

答案 5 :(得分:0)

接受的答案不适用于没有' +'标志。我按照维基百科指标进行了一些数学计算, 国家代码:1到3位数,
最大值:15, 实际电话号码:12(15-3)至14(15-1)位数

这方面的最小值是10.例如,虚拟美国号码" + 14155552671"是最低限度的。打破它,+1是美国国家代码,其余的都是'区号' +'订阅者编号'这将是10.在我的研究中,我无法找到一个小于7位的数字(瑞典)并且是有效的。

因此我必须提出的正则表达式与' +'与10~15之间的数字一起签名如下:

  

^ \ ++?[1-9] [0-9] \ d {6,14} $

这很有效。您可以在Regex101上查看。

答案 6 :(得分:0)

此RegEx ^\\+?[0-9]{1,3}[ 1-9]\\d{1,14}$也可以在没有无效正则表达式的情况下使用。

答案 7 :(得分:0)

打字稿/Javascript:E.164

这对我有用:

   static PHONE_NUMBER = /^\+[1-9]\d{10,14}$/; // E.164

   PHONE_NUMBER.test('+' + countryCode + phoneNumber);

参考: https://blog.kevinchisholm.com/javascript/javascript-e164-phone-number-validation/