首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪个正则表达式将匹配有效的国际电话号码?

哪个正则表达式将匹配有效的国际电话号码?
EN

Stack Overflow用户
提问于 2010-01-22 07:48:02
回答 19查看 250.3K关注 0票数 140

我需要先确定电话号码是否有效,然后再尝试拨打。这个电话可以打到世界上任何地方。

哪个正则表达式将匹配有效的国际电话号码?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2011-08-06 23:38:10

代码语言:javascript
复制
\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)\d{1,14}$

是匹配通用国际电话号码的正确格式。我将以美国陆线为中心的国际接入码011替换为标准的国际接入码标识符'+',使其成为强制性的。我还将国内号码的最小值改成了至少一个数字。

请注意,如果您在移动电话通讯簿中输入此格式的号码,则无论您在何处旅行,都可以成功呼叫通讯簿中的任何号码。对于固定线路,请将加号替换为您所拨打的国家/地区的国际接入码。

请注意,这不考虑国家号码计划规则-具体地说,它允许在国家号码计划可能不允许的位置使用0和1,并且还允许某些国家(例如美国)的号码长度大于国家号码计划。

票数 115
EN

Stack Overflow用户

发布于 2013-08-03 13:29:40

这是一个进一步的优化。

代码语言:javascript
复制
\+(9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|
2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|
4[987654310]|3[9643210]|2[70]|7|1)
\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*\d\W*(\d{1,2})$

(i)允许有效的国际前缀

(ii)后跟9或10位数字,并有任何类型或位置的分隔符(最后两位数字之间除外)

这将匹配:

代码语言:javascript
复制
 +1-234-567-8901
代码语言:javascript
复制
 +61-234-567-89-01
代码语言:javascript
复制
 +46-234 5678901
代码语言:javascript
复制
 +1 (234) 56 89 901
代码语言:javascript
复制
 +1 (234) 56-89 901
代码语言:javascript
复制
 +46.234.567.8901
代码语言:javascript
复制
 +1/234/567/8901
票数 37
EN

Stack Overflow用户

发布于 2013-12-03 19:20:47

您可以使用来自谷歌的库libphonenumber

代码语言:javascript
复制
PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
String decodedNumber = null;
PhoneNumber number;
    try {
        number = phoneNumberUtil.parse(encodedHeader, null);
        decodedNumber = phoneNumberUtil.format(number, PhoneNumberFormat.E164);
    } catch (NumberParseException e) {
        e.printStackTrace();
    }
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2113908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档