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

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

给定一个“电话号码”和国家/地区 ID(比如说 ISO 国家/地区代码),我想将其转换为标准 E.164 国际格式电话号码。

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

您会推荐哪个 Java 框架/库/实用程序来完成此操作?

附: “电话号码”可以是公众可以识别的任何内容 - 例如

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

最后一个是我最喜欢的 - 这是一些人在英国写他们的号码的方式,这意味着你应该使用 +44 或你应该使用 0。

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

最佳答案

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));

https://stackoverflow.com/questions/187216/

相关文章:

emacs - 在 Emacs 中,如何在一系列初始化语句中排列等号?

c# - 如何格式化 Visual Studio 2012 中的所有文件?

java - String.format 或类似的正确格式字符串

c++ - 如何使用具有类似 printf 格式的 C++ std::ostream?

android - 点后 2 位 float

javascript - 如何设置 VSCode 以将花括号放在新行上?

html - 在 Visual Studio Code 中格式化 html 代码,使属性位于不同的行

c - intptr_t 和 uintptr_t 的字符串格式

coding-style - 线宽格式标准

java - 日期和时间格式取决于区域设置