需要根据用户输入的手机号 ,格式化 输出 对应的国际标准手机号格式。比如:输入:18666666666 ==> +86 186 6666 6666
使用到了Google的一个号码解析库: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());
}
其中swissNumberProto 的结构:
{
// 国家编号
"country_code": 41,
"national_number": 446681800
}
检测输入的号码是否有效:
boolean isValid = phoneUtil.isValidNumber(swissNumberProto); // returns true
还可以根据需求输出多种格式的号码格式:
// 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));
还可以改变参数输出不同国家格式的号码:
//US 可替换
// 输出 "011 41 44 668 1800".
System.out.println(phoneUtil.formatOutOfCountryCallingNumber(swissNumberProto, "US"));
自定义格式输出:
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
AsYouTypeFormatter formatter = phoneUtil.getAsYouTypeFormatter("US");
System.out.println(formatter.inputDigit('6')); // Outputs "6"
... // Input more digits
System.out.println(formatter.inputDigit('3')); // Now outputs "650 253"
根据号码输出号码归属地的名称:
PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance();
// Outputs "Zurich" 输出英文
System.out.println(geocoder.getDescriptionForNumber(swissNumberProto, Locale.ENGLISH));
// Outputs "Zürich" 德语
System.out.println(geocoder.getDescriptionForNumber(swissNumberProto, Locale.GERMAN));
// Outputs "Zurigo" 意大利
System.out.println(geocoder.getDescriptionForNumber(swissNumberProto, Locale.ITALIAN));
获取手机运营商:
PhoneNumber swissMobileNumber =
new PhoneNumber().setCountryCode(41).setNationalNumber(798765432L);
PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper.getInstance();
// Outputs "Swisscom" 瑞士电信
System.out.println(carrierMapper.getNameForNumber(swissMobileNumber, Locale.ENGLISH));