Проверка формата телефона java

Регулярное выражение Java: часть 4 – Проверка распространенных форматов: номера телефонов, электронные письма

В этом сеансе мы будем использовать регулярное выражение для проверки некоторых распространенных входных данных: номера телефонов и адреса электронной почты Случай 1: Проверка телефонных номеров Форматы телефонных номеров различаются…

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

Случай 1: Проверка телефонных номеров

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

Код страны (3 цифры) – код города (2 цифры) – индивидуальный номер телефона (7 цифр)

Имея это в виду, пользователи должны вводить:

  • Код страны: необходимо ввести 3 цифры, за которыми следует символ тире (-) .
  • Код города: необходимо ввести 2 цифры, за которыми следует символ тире (-) .
  • Индивидуальный номер телефона: необходимо ввести 7 цифр

Давайте посмотрим следующий код:

import java.util.Scanner; public class Demo < public static void main(String[] args) < boolean flag; Scanner sc = new Scanner(System.in); do < String phonePattern = "\\d-\\d-\\d"; System.out.print("Input your phone(xxx-xx-xxxxxxx): "); String input = sc.next(); flag = input.matches(phonePattern); if (!flag) System.out.println("Invalid data!"); > while (!flag); System.out.println("Valid data"); > >

Основываясь на требуемом формате, я определил шаблон следующим образом::

  • Эта часть предназначена для кода нации, для которого требуется 3 цифры, поэтому я использовал \d для этой задачи
  • Вторая часть предназначена для кода города, который содержит 2 цифры, поэтому \d следует применять
  • Последняя часть предназначена для отдельного телефонного номера, который содержит 7 цифр, и, следовательно, \d
Читайте также:  Disable all css firefox

Теперь запустите и протестируйте свою программу:

Input your phone(xxx-xx-xxxxxxx): 084-888-1234567 Invalid data! Input your phone(xxx-xx-xxxxxxx): 084-88-123456 Invalid data! Input your phone(xxx-xx-xxxxxxx): 084-38-1234567 Valid data

084-888-11234567 : неверно, так как код города содержал 3 цифры, в то время как для этой части требуется только 2 цифры 084-88-123456 : неверно, поскольку отдельный номер телефона содержал только 6 цифр, в то время как этот должен состоять из 7 цифр 084-38-1234567 : полностью соответствует шаблону

Случай 2: Проверка формата телефонного номера с дополнительной деталью с использованием метода группировки

Обычно, когда мы совершаем телефонный звонок внутри страны (по крайней мере, в моей стране), нам не нужно набирать код страны. Поэтому пользователям будет удобно, если они смогут дополнительно ввести код страны. Для выполнения этой задачи мы можем использовать технику, называемую группировкой. Группировка-это механизм, с помощью которого группу символов регулярного выражения можно рассматривать как единое целое. И, группируя определенные символы шаблона в группу, мы можем разрешить пользователям либо вводить всю группу, либо игнорировать всю группу. Поэтому, чтобы при необходимости разрешить ввод кода страны, мы поместим часть кода страны в группу, за которой следует соответствующий символ-квантор. Давайте проверим следующий код:

import java.util.Scanner; public class Demo < public static void main(String[] args) < boolean flag; Scanner sc = new Scanner(System.in); do < String phonePattern = "(\\d-)?\\d-\\d"; System.out.print("Input your phone(xxx-xx-xxxxxxx): "); String input = sc.next(); flag = input.matches(phonePattern); if (!flag) System.out.println("Invalid data!"); > while (!flag); System.out.println("Valid data"); > >

Я определил шаблон следующим образом:

В принципе, это та же схема, что и ранее. Но я поместил первую часть (\d-) в группу , используя скобки. Каждый символ, заключенный в квадратные скобки, принадлежит группе. У вас может быть столько групп, сколько вы считаете нужным в шаблоне. Вслед за нашей группой здесь стоит знак вопроса (?) . Это когда появляется дополнительная часть. Знак вопроса (?) означает 0 или 1, что означает, что пользователи могут игнорировать всю группу; или они могут ввести всю группу, но только один раз. Это имеет смысл, потому что мы не хотим, чтобы код страны появлялся более одного раза. Пришло время запустить программу:

Input your phone(xxx-xx-xxxxxxx): 123-1234567 Invalid data! Input your phone(xxx-xx-xxxxxxx): 12-12-1234567 Invalid data! Input your phone(xxx-xx-xxxxxxx): 084-38-1234567 Valid data

123-134567 : неверно, так как код города состоял из 3 цифр 12-12-1234567 : также неверно, потому что код страны состоял всего из 2 цифр. Обратите внимание, что, поскольку мы помещаем код страны в группу, за которой следует знак вопроса, пользователи могут игнорировать эту группу. Но если пользователи решат ввести данные, должна быть предоставлена вся группа 084-38-1234567 : полностью соответствует шаблону Давайте запустим программу еще раз:

Input your phone(xxx-xx-xxxxxxx): 38-1234567 Valid data

38-11234567 : также допустимо, потому что мы могли пропустить код страны, другие части соответствовали шаблону

Случай 3: Проверка форматов электронной почты

В реальных приложениях для разных поставщиков программного обеспечения требуются разные форматы электронной почты. Не существует единого шаблона, который можно было бы использовать для проверки всех форматов электронной почты. Это действительно зависит от каждого конкретного случая, когда нам нужен соответствующий подход. Давайте начнем с простого формата электронной почты:

В этом простом примере электронной почты мы можем разделить до 5 частей:

  • Первая часть-это имя пользователя (адрес электронной почты): эта часть может содержать алфавитные символы и цифры с минимальным количеством 3 и максимальным количеством 15 символов.
  • Вторая часть-это знак at (@)
  • Третья часть-это доменное имя (адрес): эта часть может содержать алфавитные символы и цифры минимум 3 и максимум 15 символов разрешено
  • Четвертая часть-точка (.) характер
  • Пятая часть-расширение домена (com): эта часть может содержать алфавитные символы только с минимальным количеством 2 и максимальным количеством 5 символов разрешено
import java.util.Scanner; public class Demo < public static void main(String[] args) < boolean flag; Scanner sc = new Scanner(System.in); do < String emailPattern = " [a-zA-Z0-9]@[a-zA-Z0-9][.][a-zA-Z]"; System.out.print("Input your email(email@address.com): "); String input = sc.next(); flag = input.matches(emailPattern); if (!flag) System.out.println("Invalid data!"); > while (!flag); System.out.println("Valid data"); > >

В программе у меня был шаблон:

String emailPattern = "[a-zA-Z0-9]@[a-zA-Z0-9][.][a-zA-Z]";
  • Первая часть может содержать буквы и цифры таким образом, применяется [a-zA-Z0-9]. Примечание. Я не использовал \w, потому что \w также включает подчеркивание (_)
  • Вторая часть-это знак at ( @ ), поэтому я просто поместил его туда
  • Третья часть-это доменное имя. Это похоже на первую часть
  • Четвертая часть-это символ точки (.). Обратите внимание на это. В регулярном выражении точка обозначает любой символ. Но в этой части мы хотим, чтобы пользователи вводили точку, а не какой-либо символ, поэтому нам нужно поместить ее в запасные скобки, чтобы рассматривать ее как обычный символ. Другой способ добиться этого-избежать символа точки \.
  • Пятая часть – это расширение домена, которое позволяет использовать только алфавитные символы. Итак, схема [а-за-За] достаточно.

Теперь давайте запустим программу:

Input your email(email@address.com): email@gmail. Invalid data! Input your email(email@address.com): emailgmail.com Invalid data! Input your email(email@address.com): email@gmail.com Valid data

email@gmail : неверно, потому что он пропустил . и расширение домена emailgmail.com : неверно, потому что не было знака @ email@gmail.com : полностью соответствует шаблону.

Теперь давайте немного обновим наш шаблон электронной почты. У некоторых людей есть адреса электронной почты, такие как:

Как вы можете видеть, этот адрес электронной почты имеет второе доменное расширение(.us). и это выдвигает еще одно требование: мы должны разрешить пользователям при необходимости вводить другое расширение домена. Но помните, что пользователи либо вводят все другое расширение домена, либо не вводят его вообще. Теперь пришло время снова применить технику группировки. Существует 2 способа выполнения задачи с использованием метода группировки. Первый и долгий путь:

String emailPattern = "[a-zA-Z0-9]@[a-zA-Z0-9][.][a-zA-Z]([.][a-zA-Z])?";
String emailPattern = "[a-zA-Z0-9]@[a-zA-Z0-9]([.][a-zA-Z])";

Я оставлю вас, чтобы вы сами протестировали программу здесь.

Посещение learnbyproject.net для бесплатных Курсов регулярного выражения и других бесплатных курсов

Читайте ещё по теме:

Источник

Проверка телефонных номеров с помощью Java Regex

Иногда нам нужно проверить текст, чтобы убедиться, что его содержимое соответствует какому-то формату. В этом кратком руководстве мы увидим, как проверять различные форматы телефонных номеров с помощью регулярных выражений .

2. Регулярные выражения для проверки телефонных номеров

2.1. Десятизначное число

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

 @Test   public void whenMatchesTenDigitsNumber_thenCorrect()    Pattern pattern = Pattern.compile("^\\d$");   Matcher matcher = pattern.matcher("2055550125");   assertTrue(matcher.matches());   > 

Это выражение позволит использовать такие числа, как 2055550125 .

2.2. Число с пробелами, точками или дефисами

Во втором примере давайте посмотрим, как мы можем разрешить необязательные пробелы, точки или дефисы (-) между числами:

 @Test   public void whenMatchesTenDigitsNumberWhitespacesDotHyphen_thenCorrect()    Pattern pattern = Pattern.compile("^(\\d[- .]?)\\d$");   Matcher matcher = pattern.matcher("202 555 0125");   assertTrue(matcher.matches());   > 

Для достижения этой дополнительной цели (необязательный пробел или дефис) мы просто добавили символы:

Этот шаблон позволит использовать такие номера, как 2055550125 , 202 555 0125 , 202.555.0125 и 202-555-0125 .

2.3. Число в скобках

Далее добавим возможность разместить первую часть нашего телефона в скобках :

 @Test   public void whenMatchesTenDigitsNumberParenthesis_thenCorrect()    Pattern pattern = Pattern.compile"^((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$");   Matcher matcher = pattern.matcher("(202) 555-0125");   assertTrue(matcher.matches());   > 

Чтобы разрешить необязательные круглые скобки в числе, мы добавили в наше регулярное выражение следующие символы:

Это выражение позволит использовать такие числа, как (202)5550125 , (202) 555-0125 или (202)-555-0125 . Кроме того, это выражение также позволит использовать телефонные номера, описанные в предыдущем примере.

2.4. Номер с международным префиксом

Наконец, давайте посмотрим, как разрешить международный префикс в начале номера телефона :

 @Test   public void whenMatchesTenDigitsNumberPrefix_thenCorrect()    Pattern pattern = Pattern.compile("^(\\+\\d( )?)?((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$");   Matcher matcher = pattern.matcher("+111 (202) 555-0125");    assertTrue(matcher.matches());   > 

Чтобы разрешить префикс в нашем номере, мы добавили в начало нашего шаблона символы:

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

3. Применение нескольких регулярных выражений

Как мы видели, действительный номер телефона может иметь несколько различных форматов. Поэтому мы можем захотеть проверить, соответствует ли наша строка любому из этих форматов.

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

Если мы не можем создать общее регулярное выражение, которое может проверять все возможные случаи, которые мы хотим охватить, мы можем определить разные выражения для каждого из случаев, а затем использовать их все вместе, объединив их с помощью символа вертикальной черты (|).

Давайте посмотрим на пример, где мы используем следующие выражения:

  • Выражение, использованное в последнем разделе:
  • ^( \ + \ d( )?)?(( \ ( \ d \ ))| \ d) [- .] ? \ d < 3>[- .] ? \ d$
  • Регулярное выражение, разрешающее такие номера, как +111 123 456 789:
  • ^( \ + \ d( )?)?( \ d [ ] ?) \ d$
  • Шаблон, позволяющий использовать такие номера, как +111 123 45 67 89:
  • ^( \ + \ d( )?)?( \ d [ ] ?)( \ d [ ] ?) \ d$
 @Test   public void whenMatchesPhoneNumber_thenCorrect()    String patterns   = "^(\\+\\d( )?)?((\\(\\d\\))|\\d)[- .]?\\d[- .]?\\d$"   + "|^(\\+\\d( )?)?(\\d[ ]?)\\d$"   + "|^(\\+\\d( )?)?(\\d[ ]?)(\\d[ ]?)\\d$";    String[] validPhoneNumbers   = "2055550125","202 555 0125", "(202) 555-0125", "+111 (202) 555-0125",   "636 856 789", "+111 636 856 789", "636 85 67 89", "+111 636 85 67 89">;    Pattern pattern = Pattern.compile(patterns);   for(String phoneNumber : validPhoneNumbers)    Matcher matcher = pattern.matcher(phoneNumber);   assertTrue(matcher.matches());   >   > 

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

4. Вывод

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

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

Источник

Оцените статью