我需要先确定电话号码是否有效,然后再尝试拨打。这个电话可以打到世界上任何地方。
哪个正则表达式将匹配有效的国际电话号码?
发布于 2011-08-06 23:38:10
\+(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,并且还允许某些国家(例如美国)的号码长度大于国家号码计划。
发布于 2013-08-03 13:29:40
这是一个进一步的优化。
\+(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位数字,并有任何类型或位置的分隔符(最后两位数字之间除外)
这将匹配:
+1-234-567-8901
+61-234-567-89-01
+46-234 5678901
+1 (234) 56 89 901
+1 (234) 56-89 901
+46.234.567.8901
+1/234/567/8901
发布于 2013-12-03 19:20:47
您可以使用来自谷歌的库libphonenumber。
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();
}
https://stackoverflow.com/questions/2113908
复制相似问题