繁体   English   中英

如何在 libphonenumber (Java) 中进行严格的电话号码验证?

[英]How to do strict phone number validation in libphonenumber (Java)?

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

在他们的演示站点中测试

https://libphonenumber.appspot.com

回复

代码明智:

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'

我知道已经两年了,但如果有人正在寻找答案,那么请考虑看这里,如上文所述。 在文本和表格之间,您最终会发现这个:

在此处输入图像描述

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

例如:

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

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

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

另请参阅: 这篇文章、 phoneregex.comrexlib 的部分,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM