当前位置:  开发笔记 > 编程语言 > 正文

使用Java将电话号码转换为国际格式(E.164)的最佳方法是什么?

如何解决《使用Java将电话号码转换为国际格式(E.164)的最佳方法是什么?》经验,为你挑选了2个好方法。

使用Java将电话号码转换为国际格式(E.164)的最佳方法是什么?

鉴于"电话号码"和国家/地区ID(假设是ISO国家/地区代码),我想将其转换为标准的E.164国际格式电话号码.

我相信我可以很容易地手工完成 - 但我不确定它在所有情况下都能正常工作.

您建议使用哪个Java框架/库/实用程序来完成此任务?

PS"电话号码"可以是公众可识别的任何东西 - 例如

* (510) 786-0404
* 1-800-GOT-MILK
* +44-(0)800-7310658

最后一个是我最喜欢的 - 这是有些人在英国写他们的号码并且意味着你要么使用+44,要么你应该使用0.

E.164格式编号应全部为数字,并使用完整的国际国家代码(例如+ 44)



1> Collin Peter..:

Google提供了一个用于处理电话号码的库.他们用于Android的那个

http://code.google.com/p/libphonenumber/

String swissNumberStr = "044 668 18 00"
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
  PhoneNumber swissNumberProto = phoneUtil.parse(swissNumberStr, "CH");
} catch (NumberParseException e) {
  System.err.println("NumberParseException was thrown: " + e.toString());
}

// Produces "+41 44 668 18 00"
System.out.println(phoneUtil.format(swissNumberProto, PhoneNumberFormat.INTERNATIONAL));
// Produces "044 668 18 00"
System.out.println(phoneUtil.format(swissNumberProto, PhoneNumberFormat.NATIONAL));
// Produces "+41446681800"
System.out.println(phoneUtil.format(swissNumberProto, PhoneNumberFormat.E164));



2> cletus..:

从写这种东西的经验来看,100%的可靠性真的很难.我已经编写了一些Java代码,这些代码在处理我们拥有的数据方面相当不错,但并不适用于每个国家/地区.您需要问的问题是:

各国之间的数字映射是否一致?美国使用了很多(例如1800-GOT-MILK),但在澳大利亚,作为一个例子,它非常罕见.您需要做的是确保您正在为相关国家/地区做正确的映射,如果它有所不同(可能没有).我不知道哪些国家使用不同的字母表(例如俄罗斯的Cyrilic和前东方国家);

你必须接受你的解决方案不是100%,你不应该期望它.你需要采取"最好的猜测"方法.例如,没有真正的方式知道132345是澳大利亚的有效电话号码,1300 123 456也是如此,但这些只是13xx号码的两种模式,而且它们不能从海外打电话;

您还必须询问是否要验证区域(区域代码).我相信美国使用的区域代码的第二个数字是1或0的系统.这可能曾经是这种情况,但我不确定它是否仍然适用.无论如何,许多其他国家都会有其他规则.在澳大利亚,固定电话和移动(手机)电话的有效区号是两位数(第一位是0).08,03和04都是有效的.01不是.你怎么迎合这个?你想要_____吗?

无论他们写多少数字,各国都会使用不同的约定.您必须决定是否要接受"规范"以外的其他内容.这些在澳大利亚很常见:

(02)1234 5678

02 1234 5678

0411 123 123(但我从未见过04 1112 3456)

131 123

13 1123

131 123

1 300 123 123

1300 123 123

02-1234-5678

1300-234-234

+44 78 1234 1234

+44(0)78 1234 1234

+ 44-78-1234-1234

+ 44-(0)78-1234-1234

0011 44​​ 78 1234 1234(0011是标准的国际拨号代码)

(44)078 1234 1234(不常见)

这就是我的头脑.对于一个国家.例如,在法国,通常用数字对编写电话号码(12 34 56 78),他们也这样说:而不是:

un(one),deux(two),trois(three),...

它的

douze(十二),trente-quatre(三十四),...

您想要迎合这种文化差异吗?我会假设没有,但这个问题值得考虑,以防万一你的规则过于严格.

也有些人可能会在电话号码上附加分机号码,可能带有"ext"或类似的缩写.你想要迎合这个吗?

对不起,这里没有代码.只是一系列问题要问自己和需要考虑的问题.正如其他人所说的那样,一系列正则表达式可以完成上述大部分工作,但最终电话号码字段(大部分)是在一天结束时(通常)自由格式的文本.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有