Валидация E-mail адреса с помощью регулярных выражений – Devcolibri – Android для начинающих

Валидация 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[] {
                        "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

56939
24/04/2013

7 комментариев к статье "Валидация E-mail адреса с помощью регулярных выражений"

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)