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

Sea*_* W. 46 regex

我需要添加一个匹配所有可能的有效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,4155555434,555-4345或5554345.正则表达式不应仅限于匹配美国国家代码.基本上,它应该与+ xxxxxxxxxxx格式匹配.我还认为这个数字可能会更长,因为有多位数的国家/地区代码,例如在英国.T-Mobile的英国号是+447953966150我会更新这个,如果我能想出一个更好的例子.

Gra*_*son 89

接受的答案是好的,除了E.164号码最多可以有15位数.规范也没有表明最低限度,所以我不一定指望10.

它应该是^\+?[1-9]\d{1,14}$.

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

  • 新西兰服务号码可以短至5位数,包括国家代码,例如:+ 64010.也许答案应该更新为`^\+?\ d {5,15} $`?甚至更好:`^\+?[1-9]\d {4,14} $`考虑到没有国家代码从0开始的事实.就个人而言,我会使用`^\+? [1-9]\d {1,14} $`因为E.164中没有定义用户号码的最小长度. (16认同)
  • 对于Twilio之类的服务,E.164中的+不是可选的,因此请删除?。在+ ^ \ + [1-9] \ d {1,14} $之后 (3认同)

age*_*t-j 14

我想在你有一套很好的例子之前,你最好通过一个灵活的正则表达式来服务.这个将匹配a +后跟10-14位数.

^\+?\d{10,14}$
Run Code Online (Sandbox Code Playgroud)

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

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

^\+?\d{6,7}[2-9]\d{3}$
Run Code Online (Sandbox Code Playgroud)

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