【问题标题】:How to do strict phone number validation in libphonenumber (Java)?如何在 libphonenumber (Java) 中进行严格的电话号码验证?
【发布时间】:2018-03-19 15:15:31
【问题描述】:

例如,以下(无效)AU手机号码被libphonenumber ++++++614- -12a345678(())&认为是有效的:

Tested in their demo site:

代码方面:

final String mobilePhoneNumber = "++++++614-  -12a345678(())&";
final String region = "AU";
final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

// true
// I don't get it, how come ++++++614-  -12a345678(())& is even considered a possible number??
System.out.println(phoneNumberUtil.isPossibleNumber(mobilePhoneNumber, region));

final Phonenumber.PhoneNumber phoneNumber = phoneNumberUtil.parse(mobilePhoneNumber, region);
// true
final boolean validNumberForRegion = phoneNumberUtil.isValidNumberForRegion(phoneNumber, region);
// true
final boolean validMobileNumber = phoneNumberUtil.getNumberType(phoneNumber).equals(PhoneNumberType.MOBILE);

在 libphonenumber v8.9.2 上测试:

compile group: 'com.googlecode.libphonenumber', name: 'libphonenumber', version: '8.9.2'

【问题讨论】:

    标签: java validation phone-number libphonenumber


    【解决方案1】:

    我知道已经两年了,但如果有人在寻找答案,请考虑查看here,如上所说。在文本和表格之间,你最终会找到这个:

    最好说,电话号码是正确的,但格式不正确。因此,我们需要的通常是国际或国家格式加上地区或国家代码。

    例如:

    final String mobilePhoneNumber = "++++++614-  -12a345678(())&";
    final String region = "AU";
    final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
    final Phonenumber.PhoneNumber phoneNumber = phoneNumberUtil.parse(mobilePhoneNumber, region);
    
    String formatted = phoneNumberUtil.format(number, PhoneNumberFormat.INTERNATIONAL);
    
    String national = phoneNumberUtil.format(number, PhoneNumberFormat.NATIONAL);
    
    System.out.println(formatted); // +61 412 345 678
    System.out.println(national); // 0412 345 678
    
    

    【讨论】:

      【解决方案2】:

      首先,编写一个使用正则表达式验证输入的方法。比如:

      boolean validPhone(String str){
      str.matches("^[+]?\\d{2,4}(-?\\d{1,5}){0,2}$");
      }
      

      另见: This post,phoneregex.comrexlib's section,

      【讨论】:

      • OP 专门要求 Google 库 libphonenumber (Java) 中的示例。你正在重新发明轮子。您的函数不处理检查美国实际有效的区号,或者它是否是有效的意大利电话号码(带或不带国家代码?)或 libphonenumber 处理的许多其他用例。很抱歉这么消极,但这不是一个有用的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多