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

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

这个 regex 适用于北美电话号码,但是我需要一些适用于国际号码的东西:

([2-9] d [2-9] d {6}) $

示例: + 13172222222匹配 13172222222 still matches because +1 or 1 are optional 3172222222仍然匹配,因为 + 1或1是可选的 3171222222不匹配,也不是有效的 NANPA 号码。

资料来源: Freeswitch.org

我也遇到了 这个相关的问题,但我认为它太疯狂了,我的需要。在我的例子中,我只是验证一个黑名单条目,并将其与传入的 Twilio 数据进行比较; 因此,我不太关心国家代码是否有效。我真的只需要测试一个数字是否匹配一般的 E.164形式,而不是假设它是一个 NANPA。

To be better understand what I need to match, here is an example from the Twilio 文档:

请求中的所有电话号码 Twilio are in E.164 format if possible. For example, (415) 555-4345 会显示为’+ 14155554345’。 然而,偶尔也会出现这种情况 where Twilio cannot normalize an 来电显示为 E.164 Twilio 会报告原始情况 来电显示字符串。

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

76007 次浏览

我认为,在您拥有大量示例之前,最好使用灵活的正则表达式。这一个将匹配 +后跟10-14位数字。

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

这个短语的意思是: ^ Match begining of string. 可选地匹配 +符号。 \d{10,14} Match between 10 and 14 digits. 确保我们在字符串的末尾。

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

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

[2-9] means match any digit from 2 through 9 (don't match 0 or 1.)

除了需要转义初始 +之外,您提供的正则表达式应该可以正常工作。

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

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

这只匹配 +1617455221116174552211等格式

/\A\+?\d{11}\z/

如果您正在使用 Twilio 和 Ruby on Rails,那么它尤其有用

接受的答案是好的,除了一个 E.164数字可以有多达15个数字。规范也没有说明最小值,所以我不一定指望是10。

It should be ^\+?[1-9]\d{1,14}$

参见 http://en.wikipedia.org/wiki/E.164

我用了公认的答案,但在很多情况下都失败了:

对于以下输入:

  • 数字不以“ +”开头的地方。
  • 数量少于9的地方。

正则表达式失败。

I finally used

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

这招太有效了!

接受的答案不适用于没有“ +”符号的数字。我根据维基百科的指标做了一些数学计算, 国家代码: 1至3位数字,
最高: 15, 实际电话号码: 12(15-3)至14(15-1)位

这方面的最低限度是10。例如,虚拟的美国数字“ + 14155552671”是最小值。分解一下,+ 1是国家国家代码,其余的都是“区号”+ “用户号码”,也就是10。在我的研究中,我找不到一个小于7位数的数字(瑞典) ,这是有效的。

因此,我想出的正则表达式与’+’符号一起工作,以及大部分位于10 ~ 15之间的数字如下:

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

这个很好用,你可以在 Regex101上看到。

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

类型/Javascript: E. 164

这对我有用:

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


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

参考文献: < a href = “ https://blog.kevinchisholm.com/javascript/javascript-e164-phone-number-valid/”rel = “ nofollow noReferrer”> https://blog.kevinchisholm.com/javascript/javascript-e164-phone-number-validation/