Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, соответствует ли заданная строка стандартному формату электронной почты на Java с использованием регулярных выражений. Мы определим подходящий шаблон регулярного выражения, воспользуемся методом Pattern.matches() для валидации и протестируем нашу реализацию с различными действительными и недействительными адресами электронной почты, чтобы убедиться, что она работает правильно. Это практическое упражнение предоставит практический опыт работы с возможностями регулярных выражений Java для сопоставления строковых шаблонов.
Определение шаблона регулярного выражения для адреса электронной почты
На этом этапе мы начнем с определения шаблона регулярного выражения, который будем использовать для проверки адресов электронной почты. Регулярные выражения, часто сокращенные до "regex" или "regexp", представляют собой последовательности символов, которые определяют шаблон поиска. Они чрезвычайно мощны для сопоставления шаблонов и манипуляции строками.
Для проверки электронной почты шаблон регулярного выражения помогает нам проверить, соответствует ли заданная строка стандартному формату адреса электронной почты (например, username@domain.com). Хотя идеальный регулярное выражение для всех возможных действительных адресов электронной почты очень сложно, мы можем определить шаблон, который охватывает большинство распространенных и действительных форматов.
Мы создадим новый файл Java для хранения нашего кода.
Откройте WebIDE, если он еще не открыт. По умолчанию вы должны находиться в каталоге
~/project.В проводнике файлов слева щелкните правой кнопкой мыши в пустом пространстве и выберите "Новый файл". Назовите файл
EmailValidator.java.Откройте файл
EmailValidator.javaв редакторе, кликнув на него в проводнике файлов.Теперь давайте добавим базовую структуру нашего 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,код страны).$: Соответствует концу строки.
Не беспокойтесь, если шаблон регулярного выражения кажется сложным. Понимание всех деталей сложных шаблонов регулярных выражений требует времени и практики. Пока сосредоточьтесь на том, что эта строка определяет правило, как должен выглядеть действительный адрес электронной почты.
Сохраните файл
EmailValidator.java(Ctrl+S или Cmd+S).
Теперь вы успешно создали файл Java и определили шаблон регулярного выражения для проверки электронной почты. На следующем этапе мы будем использовать этот шаблон для проверки реальных адресов электронной почты.
Использование метода Pattern.matches() для валидации адреса электронной почты
На этом этапе мы научимся использовать метод Pattern.matches() в Java для проверки, соответствует ли заданная строка нашему определенному шаблону регулярного выражения для электронной почты. Метод Pattern.matches(regex, input) представляет собой удобный способ выполнения простого сопоставления всей входной строки с регулярным выражением. Он возвращает true, если вся входная строка соответствует регулярному выражению, и false в противном случае.
Мы добавим новый метод в наш класс EmailValidator для выполнения этой проверки.
Откройте файл
EmailValidator.javaв редакторе WebIDE, если он еще не открыт.Добавьте следующий метод внутри класса
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.
Теперь давайте изменим метод
mainдля использования нашего нового методаisValidEmail. Замените существующий методmainследующим кодом:public static void main(String[] args) { String testEmail = "test.email@example.com"; 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 = "test.email@example.com";: мы определяем пример адреса электронной почты для тестирования.boolean isValid = isValidEmail(testEmail);: мы вызываем наш методisValidEmailсtestEmailи сохраняем возвращаемое логическое значение в переменнойisValid.- Блок
ifиelseпроверяет значениеisValidи выводит сообщение, указывающее, является ли адрес электронной почты действительным или нет.
Сохраните файл
EmailValidator.java(Ctrl+S или Cmd+S).Теперь давайте скомпилируем наш обновленный программу. Откройте Терминал в нижней части WebIDE и убедитесь, что вы находитесь в каталоге
~/project. Выполните следующую команду:javac EmailValidator.javaЕсли нет ошибок, компиляция прошла успешно.
Наконец, запустите скомпилированную программу с помощью команды
java:java EmailValidatorВы должны увидеть вывод, указывающий, является ли тестовый адрес электронной почты действительным в соответствии с нашим шаблоном регулярного выражения.
test.email@example.com is a valid email address.
Теперь вы успешно использовали метод Pattern.matches() для проверки адреса электронной почты с использованием определенного вами шаблона регулярного выражения. На следующем этапе мы протестируем разные действительные и недействительные адреса электронной почты.
Тестирование с корректными и некорректными адресами электронной почты
На этом последнем этапе мы протестируем наш класс EmailValidator с использованием нескольких примеров как действительных, так и недействительных адресов электронной почты, чтобы увидеть, как наш шаблон регулярного выражения и метод Pattern.matches() обрабатывают их. Это поможет нам понять поведение нашей логики проверки.
Откройте файл
EmailValidator.javaв редакторе WebIDE.Измените метод
mainдля тестирования нескольких адресов электронной почты. Замените текущий методmainследующим кодом:public static void main(String[] args) { String[] testEmails = { "test.email@example.com", // Valid "another_test+alias@sub.domain.co.uk", // Valid "invalid-email", // Invalid (missing @) "invalid@domain", // Invalid (missing top-level domain) "invalid@domain.", // Invalid (missing top-level domain) "invalid@domain.c", // Invalid (top-level domain too short) "invalid@domain.abcdefgh", // Invalid (top-level domain too long) "@domain.com", // Invalid (missing username) "test@.com" // 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и выводим результат, как мы делали на предыдущем этапе.
- Мы создаем массив строк с именем
Сохраните файл
EmailValidator.java(Ctrl+S или Cmd+S).Скомпилируйте модифицированную программу в Терминале:
javac EmailValidator.javaУбедитесь, что нет ошибок компиляции.
Запустите скомпилированную программу:
java EmailValidatorОбратите внимание на вывод. Вы должны увидеть строку для каждого адреса электронной почты в массиве
testEmails, указывающую, считает ли наш валидатор его действительным или нет на основе шаблона регулярного выражения.test.email@example.com is a valid email address. another_test+alias@sub.domain.co.uk 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. invalid@domain.c is not a valid email address. invalid@domain.abcdefgh is not a valid email address. @domain.com is not a valid email address. test@.com is not a valid email address.
Путем тестирования с разными входными данными вы можете увидеть, как шаблон регулярного выражения и метод Pattern.matches() работают вместе для проверки адресов электронной почты. Помните, что хотя это регулярное выражение охватывает многие распространенные случаи, проверка всех возможных форматов адресов электронной почты в соответствии со строгими стандартами может быть гораздо более сложной.
Теперь вы успешно реализовали и протестировали базовый механизм проверки адресов электронной почты, используя возможности регулярных выражений в Java.
Резюме
В этом практическом занятии (лабораторной работе) мы начали с настройки Java-окружения и создания нового файла EmailValidator.java. Затем мы определили шаблон регулярного выражения (EMAIL_REGEX), специально разработанный для проверки адресов электронной почты. Этот шаблон, хранящийся в виде константной строки, использует класс java.util.regex.Pattern в Java, чтобы обеспечить мощные возможности сопоставления строк. Этот первый шаг создает основу для реализации логики проверки адресов электронной почты на последующих этапах.



