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 .