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

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

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

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

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

Случай 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{3}-\\d{2}-\\d{7}";
            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");
    }
}

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

String phonePattern = "\\d{3}-\\d{2}-\\d{7}";
  • Эта часть предназначена для кода нации, для которого требуется 3 цифры, поэтому я использовал \d{3} для этой задачи
  • Вторая часть предназначена для кода города, который содержит 2 цифры, поэтому \d{2} следует применять
  • Последняя часть предназначена для отдельного телефонного номера, который содержит 7 цифр, и, следовательно, \d{7}

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

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{3}-)?\\d{2}-\\d{7}";
            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");
    }
}

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

String phonePattern = "(\\d{3}-)?\\d{2}-\\d{7}";

В принципе, это та же схема, что и ранее. Но я поместил первую часть (\d{3}-) в группу , используя скобки. Каждый символ, заключенный в квадратные скобки, принадлежит группе. У вас может быть столько групп, сколько вы считаете нужным в шаблоне. Вслед за нашей группой здесь стоит знак вопроса (?) . Это когда появляется дополнительная часть. Знак вопроса (?) означает 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: Проверка форматов электронной почты

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

email@address.com

В этом простом примере электронной почты мы можем разделить до 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]{3,15}@[a-zA-Z0-9]{3,15}[.][a-zA-Z]{2,5}";
            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]{3,15}@[a-zA-Z0-9]{3,15}[.][a-zA-Z]{2,5}";
  • Первая часть может содержать буквы и цифры таким образом, применяется [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 : полностью соответствует шаблону.

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

email@gmail.com.us

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

String emailPattern = "[a-zA-Z0-9]{3,15}@[a-zA-Z0-9]{3,15}[.][a-zA-Z]{2,5}([.][a-zA-Z]{2,5})?";

Второй и короткий путь:

String emailPattern = "[a-zA-Z0-9]{3,15}@[a-zA-Z0-9]{3,15}([.][a-zA-Z]{2,5}){1,2}";

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

Предыдущая часть

Следующая часть

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

Оригинал: “https://www.codementor.io/@seranguyen/java-regular-expression-part-4-checking-common-formats-phone-numbers-emails-rbh0imslt”