使用libphonenumber格式化手机号以及归属地查询

4 篇文章 0 订阅
1 篇文章 0 订阅

使用libphonenumber格式化手机号以及归属地查询

问题:

需要根据用户输入的手机号 ,格式化 输出 对应的国际标准手机号格式。比如:输入: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));
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值