Как проверить, соответствует ли строка формату адреса электронной почты в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, соответствует ли заданная строка стандартному формату электронной почты на Java с использованием регулярных выражений. Мы определим подходящий шаблон регулярного выражения, воспользуемся методом Pattern.matches() для валидации и протестируем нашу реализацию с различными действительными и недействительными адресами электронной почты, чтобы убедиться, что она работает правильно. Это практическое упражнение предоставит практический опыт работы с возможностями регулярных выражений Java для сопоставления строковых шаблонов.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/StringManipulationGroup -.-> java/regex("RegEx") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/if_else -.-> lab-559994{{"Как проверить, соответствует ли строка формату адреса электронной почты в Java"}} java/for_loop -.-> lab-559994{{"Как проверить, соответствует ли строка формату адреса электронной почты в Java"}} java/strings -.-> lab-559994{{"Как проверить, соответствует ли строка формату адреса электронной почты в Java"}} java/regex -.-> lab-559994{{"Как проверить, соответствует ли строка формату адреса электронной почты в Java"}} java/string_methods -.-> lab-559994{{"Как проверить, соответствует ли строка формату адреса электронной почты в Java"}} end

Определение шаблона регулярного выражения для электронной почты

На этом этапе мы начнем с определения шаблона регулярного выражения, который будем использовать для проверки адресов электронной почты. Регулярные выражения, часто сокращенные до "regex" или "regexp", представляют собой последовательности символов, которые определяют шаблон поиска. Они чрезвычайно мощны для сопоставления шаблонов и манипуляции строками.

Для проверки электронной почты шаблон регулярного выражения помогает нам проверить, соответствует ли заданная строка стандартному формату адреса электронной почты (например, [email protected]). Хотя идеальный регулярное выражение для всех возможных действительных адресов электронной почты очень сложно, мы можем определить шаблон, который охватывает большинство распространенных и действительных форматов.

Мы создадим новый файл Java для хранения нашего кода.

  1. Откройте WebIDE, если он еще не открыт. По умолчанию вы должны находиться в каталоге ~/project.

  2. В проводнике файлов слева щелкните правой кнопкой мыши в пустом пространстве и выберите "Новый файл". Назовите файл EmailValidator.java.

  3. Откройте файл EmailValidator.java в редакторе, кликнув на него в проводнике файлов.

  4. Теперь давайте добавим базовую структуру нашего Java - класса и определим шаблон регулярного выражения. Скопируйте и вставьте следующий код в файл EmailValidator.java:

    import java.util.regex.Pattern;
    
    public class EmailValidator {
    
        // Email regex pattern
        private static final String EMAIL_REGEX =
                "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
    
        public static void main(String[] args) {
            // We will add code here in the next steps
        }
    }

    Давайте кратко рассмотрим новые части:

    • import java.util.regex.Pattern;: Эта строка импортирует класс Pattern, который является частью встроенной поддержки регулярных выражений в Java.
    • private static final String EMAIL_REGEX = "...";: Эта строка объявляет константную переменную с именем EMAIL_REGEX и присваивает ей наш шаблон регулярного выражения.
      • ^: Соответствует началу строки.
      • [a-zA-Z0-9_+&*-]+: Соответствует одному или нескольким буквенно - цифровым символам или _, +, &, *, -. Это для части имени пользователя.
      • (?:\\.[a-zA-Z0-9_+&*-]+)*: Соответствует нулю или более вхождений точки, за которой следуют дополнительные символы имени пользователя. Это позволяет использовать точки в имени пользователя (например, first.last).
      • @: Соответствует литеральному символу "@".
      • (?:[a-zA-Z0-9-]+\\.)+: Соответствует одному или нескольким вхождениям буквенно - цифровых символов или -, за которыми следует точка. Это для имени домена (например, domain.).
      • [a-zA-Z]{2,7}: Соответствует от 2 до 7 буквенным символам для верхнего уровня домена (например, com, org, код страны).
      • $: Соответствует концу строки.

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

  5. Сохраните файл EmailValidator.java (Ctrl+S или Cmd+S).

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

Использование метода Pattern.matches() для проверки электронной почты

На этом этапе мы научимся использовать метод Pattern.matches() в Java для проверки, соответствует ли заданная строка нашему определенному шаблону регулярного выражения для электронной почты. Метод Pattern.matches(regex, input) представляет собой удобный способ выполнения простого сопоставления всей входной строки с регулярным выражением. Он возвращает true, если вся входная строка соответствует регулярному выражению, и false в противном случае.

Мы добавим новый метод в наш класс EmailValidator для выполнения этой проверки.

  1. Откройте файл EmailValidator.java в редакторе WebIDE, если он еще не открыт.

  2. Добавьте следующий метод внутри класса EmailValidator, но вне метода main:

    public static boolean isValidEmail(String email) {
        return Pattern.matches(EMAIL_REGEX, email);
    }

    Давайте рассмотрим этот новый метод:

    • public static boolean isValidEmail(String email): Это объявляет новый метод с именем isValidEmail.
      • public: означает, что этот метод может быть доступен извне класса.
      • static: означает, что этот метод принадлежит самому классу EmailValidator, а не конкретному объекту этого класса. Мы можем вызывать его напрямую, используя имя класса (например, EmailValidator.isValidEmail(...)).
      • boolean: указывает, что этот метод вернет логическое значение (true или false).
      • (String email): указывает, что метод принимает один аргумент - строку с именем email, которая представляет собой адрес электронной почты, который мы хотим проверить.
    • return Pattern.matches(EMAIL_REGEX, email);: это ядро метода. Он вызывает метод Pattern.matches(), передавая наш EMAIL_REGEX и входную строку email. Результат этого сопоставления (true или false) затем возвращается нашим методом isValidEmail.
  3. Теперь давайте изменим метод main для использования нашего нового метода isValidEmail. Замените существующий метод main следующим кодом:

    public static void main(String[] args) {
        String testEmail = "[email protected]";
        boolean isValid = isValidEmail(testEmail);
    
        if (isValid) {
            System.out.println(testEmail + " is a valid email address.");
        } else {
            System.out.println(testEmail + " is not a valid email address.");
        }
    }

    В этом обновленном методе main:

    • String testEmail = "[email protected]";: мы определяем пример адреса электронной почты для тестирования.
    • boolean isValid = isValidEmail(testEmail);: мы вызываем наш метод isValidEmail с testEmail и сохраняем возвращаемое логическое значение в переменной isValid.
    • Блок if и else проверяет значение isValid и выводит сообщение, указывающее, является ли адрес электронной почты действительным или нет.
  4. Сохраните файл EmailValidator.java (Ctrl+S или Cmd+S).

  5. Теперь давайте скомпилируем наш обновленный программу. Откройте Терминал в нижней части WebIDE и убедитесь, что вы находитесь в каталоге ~/project. Выполните следующую команду:

    javac EmailValidator.java

    Если нет ошибок, компиляция прошла успешно.

  6. Наконец, запустите скомпилированную программу с помощью команды java:

    java EmailValidator

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

    [email protected] is a valid email address.

Теперь вы успешно использовали метод Pattern.matches() для проверки адреса электронной почты с использованием определенного вами шаблона регулярного выражения. На следующем этапе мы протестируем разные действительные и недействительные адреса электронной почты.

Тестирование с действительными и недействительными адресами электронной почты

На этом последнем этапе мы протестируем наш класс EmailValidator с использованием нескольких примеров как действительных, так и недействительных адресов электронной почты, чтобы увидеть, как наш шаблон регулярного выражения и метод Pattern.matches() обрабатывают их. Это поможет нам понять поведение нашей логики проверки.

  1. Откройте файл EmailValidator.java в редакторе WebIDE.

  2. Измените метод main для тестирования нескольких адресов электронной почты. Замените текущий метод main следующим кодом:

    public static void main(String[] args) {
        String[] testEmails = {
            "[email protected]",       // Valid
            "[email protected]", // Valid
            "invalid-email",                // Invalid (missing @)
            "invalid@domain",               // Invalid (missing top-level domain)
            "invalid@domain.",              // Invalid (missing top-level domain)
            "[email protected]",             // Invalid (top-level domain too short)
            "[email protected]",      // Invalid (top-level domain too long)
            "@domain.com",                  // Invalid (missing username)
            "[email protected]"                     // Invalid (missing domain name)
        };
    
        for (String email : testEmails) {
            boolean isValid = isValidEmail(email);
    
            if (isValid) {
                System.out.println(email + " is a valid email address.");
            } else {
                System.out.println(email + " is not a valid email address.");
            }
        }
    }

    В этом обновленном методе main:

    • Мы создаем массив строк с именем testEmails, содержащий различные адреса электронной почты, включая как действительные, так и специально недействительные.
    • Мы используем цикл for для перебора каждого адреса электронной почты в массиве testEmails.
    • Внутри цикла для каждого email мы вызываем наш метод isValidEmail и выводим результат, как мы делали на предыдущем этапе.
  3. Сохраните файл EmailValidator.java (Ctrl+S или Cmd+S).

  4. Скомпилируйте модифицированную программу в Терминале:

    javac EmailValidator.java

    Убедитесь, что нет ошибок компиляции.

  5. Запустите скомпилированную программу:

    java EmailValidator

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

    [email protected] is a valid email address.
    [email protected] is a valid email address.
    invalid-email is not a valid email address.
    invalid@domain is not a valid email address.
    invalid@domain. is not a valid email address.
    [email protected] is not a valid email address.
    [email protected] is not a valid email address.
    @domain.com is not a valid email address.
    [email protected] is not a valid email address.

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

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

Резюме

В этом практическом занятии (лабораторной работе) мы начали с настройки Java-окружения и создания нового файла EmailValidator.java. Затем мы определили шаблон регулярного выражения (EMAIL_REGEX), специально разработанный для проверки адресов электронной почты. Этот шаблон, хранящийся в виде константной строки, использует класс java.util.regex.Pattern в Java, чтобы обеспечить мощные возможности сопоставления строк. Этот первый шаг создает основу для реализации логики проверки адресов электронной почты на последующих этапах.