Рубрики
Без рубрики

Использование libphonenumber для проверки телефонных номеров

Изучите функциональные возможности libphonenumber для форматирования и проверки телефонных номеров с помощью образцов кода.

Автор оригинала: baeldung.

1. Обзор

В этом кратком руководстве мы увидим, как использовать библиотеку с открытым исходным кодом Google libphonenumber для проверки телефонных номеров в Java .

2. Зависимость Maven

Во-первых, нам нужно будет добавить зависимость для этой библиотеки в ваш pom.xml :


    com.googlecode.libphonenumber
    libphonenumber
    8.12.10

Последнюю информацию о версии можно найти на сайте Maven Central .

Теперь мы готовы использовать все возможности этой библиотеки.

3. PhoneNumberUtil

Библиотека предоставляет служебный класс PhoneNumberUtil , который предоставляет несколько методов для игры с телефонными номерами.

Давайте рассмотрим несколько примеров того, как мы можем использовать его различные API для проверки.

Важно отметить, что во всех примерах мы будем использовать одноэлементный объект этого класса для выполнения вызовов методов :

PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();

3.1. isPossibleNumber

Используя P phonenumberutil#is Possible Number , мы можем проверить, возможен ли данный номер для конкретного кода страны или региона.

В качестве примера возьмем Соединенные Штаты, которые имеют код страны 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"));
}

Здесь мы также использовали другой вариант этой функции, передав в область , из которой мы ожидаем, что номер будет набран в виде Строки .

3.2. возможен Номер Для Типа

Библиотека распознает различные типы телефонных номеров, таких как стационарные, мобильные, бесплатные, голосовая почта, VoIP, пейджер и многие другие .

Его служебный метод is Possible Number For Type проверяет, возможно ли данное число для данного типа в конкретном регионе.

В качестве примера возьмем Аргентину, поскольку она допускает различные возможные длины чисел для разных типов.

Следовательно, мы можем использовать его для демонстрации возможностей этого 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. Isnumbergeographic​

Этот метод проверяет, имеет ли данное число географию или регион, связанный с ним:

@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 вернул false для этих двух.

4. Заключение

В этом уроке мы рассмотрели некоторые функции, предлагаемые libphonenumber для форматирования и проверки телефонных номеров с помощью примеров кода.

Это богатая библиотека, которая предлагает гораздо больше полезных функций и заботится о большинстве наших потребностей приложений для форматирования, синтаксического анализа и проверки телефонных номеров.

Как всегда, исходный код доступен на GitHub .