拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用libphonenumber验证电话号码

使用libphonenumber验证电话号码

白鹭 - 2021-11-24 600 0 0

1.概述

在本快速教程中,我们将看到如何使用Google的开源库libphonenumber来验证Java中的电话号码

2. Maven依赖

pom.xml添加此库的依赖项:

<dependency>

 <groupId>com.googlecode.libphonenumber</groupId>

 <artifactId>libphonenumber</artifactId>

 <version>8.12.10</version>

 </dependency>

最新版本信息可以在Maven Central上找到。

现在,我们可以使用该库提供的所有功能。

3. PhoneNumberUtil

该库提供了一个实用程序类PhoneNumberUtil ,它提供了几种播放电话号码的方法。

让我们看一些如何使用其各种API进行验证的示例。

重要的是,在所有示例中,我们将使用此类的单例对象进行方法调用

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

3.1 isPossibleNumber

使用P honeNumberUtil#isPossibleNumber ,我们可以检查特定国家代码或地区是否可以使用给定的号码。

例如,以美国为例,该国家的国家/地区代码为1。我们可以通过以下方式检查给定的电话号码是否可能是美国号码:

@Test

 public void givenPhoneNumber_whenPossible_thenValid() {

 PhoneNumber number = new PhoneNumber();

 number.setCountryCode(1).setNationalNumber(123000L);

 assertFalse(phoneNumberUtil.isPossibleNumber(number));

 assertFalse(phoneNumberUtil.isPossibleNumber("+1 343 253 00000", "US"));

 assertFalse(phoneNumberUtil.isPossibleNumber("(343) 253-00000", "US"));

 assertFalse(phoneNumberUtil.isPossibleNumber("dial p for pizza", "US"));

 assertFalse(phoneNumberUtil.isPossibleNumber("123-000", "US"));

 }

在这里,我们还使用了此函数的另一种变体,即传入一个我们希望从中拨打的数字作为String

3.2 isPossibleNumberForType

该库可识别不同类型的电话号码,例如固定电话,移动电话,免费电话,语音邮件,VoIP,寻呼机

它的实用程序方法isPossibleNumberForType检查特定区域中给定类型的给定数字是否可能。

例如,我们去阿根廷吧,因为它允许不同类型的数字使用不同的可能长度。

因此,我们可以使用它来演示此API的功能:

@Test

 public void givenPhoneNumber_whenPossibleForType_thenValid() {

 PhoneNumber number = new PhoneNumber();

 number.setCountryCode(54);



 number.setNationalNumber(123456);

 assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE));

 assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE));



 number.setNationalNumber(12345678901L);

 assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.FIXED_LINE));

 assertTrue(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.MOBILE));

 assertFalse(phoneNumberUtil.isPossibleNumberForType(number, PhoneNumberType.TOLL_FREE));

 }

如我们所见,以上代码验证了阿根廷允许使用6位固定电话号码和11位移动电话号码。

3.3 isAlphaNumber

此方法用于验证给定的电话号码是否为有效的字母数字,例如325-CARS

@Test

 public void givenPhoneNumber_whenAlphaNumber_thenValid() {

 assertTrue(phoneNumberUtil.isAlphaNumber("325-CARS"));

 assertTrue(phoneNumberUtil.isAlphaNumber("0800 REPAIR"));

 assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE"));

 assertTrue(phoneNumberUtil.isAlphaNumber("1-800-MY-APPLE.."));

 assertFalse(phoneNumberUtil.isAlphaNumber("+876 1234-1234"));

 }

为了明确起见,有效的字母数字开头至少应包含三个数字,然后是三个或更多字母。上面的实用程序方法首先剥离给定输入的所有格式,然后检查这种情况。

3.4 isValidNumber

我们讨论的先前的API仅根据其长度来快速检查电话号码。另一方面, isValidNumber使用前缀以及长度信息进行完整的验证

@Test

 public void givenPhoneNumber_whenValid_thenOK() throws Exception {



 PhoneNumber phone = phoneNumberUtil.parse("+911234567890",

 CountryCodeSource.UNSPECIFIED.name());



 assertTrue(phoneNumberUtil.isValidNumber(phone));

 assertTrue(phoneNumberUtil.isValidNumberForRegion(phone, "IN"));

 assertFalse(phoneNumberUtil.isValidNumberForRegion(phone, "US"));

 assertTrue(phoneNumberUtil.isValidNumber(phoneNumberUtil.getExampleNumber("IN")));

 }

在这里,当我们没有指定区域时以及在我们指定区域时,数字都会被验证。

3.5 isNumberGeographical​

此方法检查给定数字是否具有与之相关联的地理或区域:

@Test

 public void givenPhoneNumber_whenNumberGeographical_thenValid() throws NumberParseException {



 PhoneNumber phone = phoneNumberUtil.parse("+911234567890", "IN");

 assertTrue(phoneNumberUtil.isNumberGeographical(phone));



 phone = new PhoneNumber().setCountryCode(1).setNationalNumber(2530000L);

 assertFalse(phoneNumberUtil.isNumberGeographical(phone));



 phone = new PhoneNumber().setCountryCode(800).setNationalNumber(12345678L);

 assertFalse(phoneNumberUtil.isNumberGeographical(phone));

 }

在这里,在上面的第一个断言中,我们以区域格式提供了国际格式的电话号码,并且该方法返回true。第二个断言使用美国本地号码,第三个断言使用免费电话号码。因此,对于这两个API,该API返回了false。

4. 结论

在本教程中,我们看到了libphonenumber提供的一些功能,这些功能可以使用代码示例来格式化和验证电话号码。

这是一个功能丰富的库,它提供了更多的实用程序功能,并满足了我们大多数格式,解析和验证电话号码的应用程序需求。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *