Валідація E-mail адреси за допомогою регулярних виразів
Дуже таки часто з'являється потреба отримання 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 [] { "[email protected]", "[email protected]", "alex.27 @ yandex.com "," [email protected] "," [email protected] "," [email protected] "," [email protected] "," alex + 27 @ gmail. com "," [email protected] "}}}; } @DataProvider public Object [] [] InvalidEmailProvider () {return new Object [] [] {{new String [] { "devcolibri", "alex @ .com.ua", "[email protected]", "alex123 @ .com "," alex123 @ .com.com "," .alex @ devcolibri.com "," alex () * @ gmail.com "," alex@%*.com "," alex..2013 @ gmail .com "," alex. @ gmail.com "," alex @ devcolibri @ gmail.com "," [email protected] "}}}; } @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); }}}
Результат тестування:
PS Дякую за увагу, залишаємо коментарі і подпісуемся на оновлення!
Encoding = "UTF-8"?