Валідація E-mail адреси за допомогою регулярних виразів

  1. Вирішення проблеми:
  2. Дії програми:
  3. Крок 1.
  4. Крок 2.
  5. Крок 3.
  6. Крок 4.

Дуже таки часто з'являється потреба отримання email адреси від користувача, так ось про це ми і поговоримо в даному уроці.

Хочу сказати, що в даному уроці я хочу продемонструвати приклад використання регулярних виразів на прикладі 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"?