例如,libphonenumber ++++++614- -12a345678(())&
认为以下(无效)AU手机号码有效:
代码明智:
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'
答案 0 :(得分: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
答案 1 :(得分:0)
首先,编写一个使用正则表达式验证输入的方法。类似的东西:
boolean validPhone(String str){
str.matches("^[+]?\\d{2,4}(-?\\d{1,5}){0,2}$");
}