Очень таки часто появляется потребность получение email адреса от пользователя, так вот об этом мы и поговорим в данном уроке.
Хочу сказать, что в данном уроке я хочу продемонстрировать пример использования регулярных выражений на примере email.
Давайте рассмотрим как ведут себя обе стороны приложение и пользователь.
Действия пользователя:
1) Пользователь вводит свой e-mail в соответствующее поле ввода.
2) Пользователь нажимает на кнопку, после чего происходит действие отправки письма.
Действия приложения:
1) После нажатия пользователем кнопки, приложение проверяет на валидность email адрес;
1.1) в случае не валидного email адреса приложение выводит пользователю соответствующее сообщение;
1.2) в случае валидного email адреса приложение отправляет письмо.
Шаг 1.
Пишем регулярное выражение.
Регулярные выражения — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов.
^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$;
В данном регулярном выражении указанно, что строка может состоять с _A-Za-z0-9 допускаемых символов, после чего идет символ @ и опять допускаемые символы.
Шаг 2.
Создаем maven проект и класс EmailValidator.java со следующим содержимым:
package com.devcolibri.validator; import java.util.regex.Matcher; import java.util.regex.Pattern; public class EmailValidator { private Pattern pattern; private Matcher matcher; private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; public EmailValidator() { pattern = Pattern.compile(EMAIL_PATTERN); } public boolean validate(final String hex) { matcher = pattern.matcher(hex); return matcher.matches(); } }
теперь разберем все:
Pattern pattern
– мы используем для построение шаблона, в нашем случае регулярного выражения.
Matcher matcher
– используется для проверки регулярного выражения.
Pattern.compile(EMAIL_PATTERN)
– компилируем регулярное выражение перед его использованием (это чувствительно сократит время).
matcher = pattern.matcher(hex)
– задаем строку которую нужно проверить.
matcher.matches()
– выполняем проверку соответствия строки с регулярным выражением.
Шаг 3.
Не зря мы создали Maven проект, так как мы будем тестировать наш валидатор с помощью JUnit и TestNG.
Давайте в pom.xml добавим зависимости:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>EmailValidate</groupId> <artifactId>EmailValidate</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8</version> </dependency> </dependencies> </project>
Шаг 4.
Создадим класс EmailValidatorTest.java в нем напишем тесты которые будут проверять правильно ли работает наше регулярное выражение.
package com.devcolibri.validator; import org.junit.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class EmailValidatorTest { private EmailValidator emailValidator; @BeforeClass public void initData() { emailValidator = new EmailValidator(); } @DataProvider public Object[][] ValidEmailProvider() { return new Object[][] { { new String[] { "alex@yandex.ru", "alex-27@yandex.com", "alex.27@yandex.com", "alex111@devcolibri.com", "alex.100@devcolibri.com.ua", "alex@1.com", "alex@gmail.com.com", "alex+27@gmail.com", "alex-27@yandex-test.com" } } }; } @DataProvider public Object[][] InvalidEmailProvider() { return new Object[][] { { new String[] { "devcolibri", "alex@.com.ua", "alex123@gmail.a", "alex123@.com", "alex123@.com.com", ".alex@devcolibri.com", "alex()*@gmail.com", "alex@%*.com", "alex..2013@gmail.com", "alex.@gmail.com", "alex@devcolibri@gmail.com", "alex@gmail.com.1ua" } } }; } @Test(dataProvider = "ValidEmailProvider") public void ValidEmailTest(String[] Email) { for (String temp : Email) { boolean valid = emailValidator.validate(temp); System.out.println("Email: " + temp + " -> " + valid); Assert.assertEquals(valid, true); } } @Test(dataProvider = "InvalidEmailProvider", dependsOnMethods = "ValidEmailTest") public void InValidEmailTest(String[] Email) { for (String temp : Email) { boolean valid = emailValidator.validate(temp); System.out.println("Email: " + temp + " -> " + valid); Assert.assertEquals(valid, false); } } }
Результат тестирования:
P.S. Спасибо за внимание, оставляем комментарии и подписуемся на обновления!
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
7 комментариев к статье "Валидация E-mail адреса с помощью регулярных выражений"