Проверка электронной почты (PHP)

Функция is_email()

На сайтах часто приходится проверять — корректно ли введена электронная почта.

Самый популярный вариант — проверять при помощи регулярных выражений.

<?php /** * Функция is_email проверяет корректно ли введена электронная почта $email * */ function is_email($email) { // список доменов верхнего уровня, в которых больше двух символов $d = 'biz|com|edu|gov|info|int|mil|name|net|org|aero|asia|cat|coop|jobs|mobi|museum|pro|tel|travel|arpa|eco|xxx'; return preg_match( '/^[a-z0-9][a-z0-9\-._]*[a-z0-9]@[a-z0-9][a-z0-9\-.]*[a-z0-9]\.('.$d.'|[a-z]{2})$/i', $email ); } // заполним массив различными вариантами ввода электронной почты $emails = array( 'test@example.com', 'test@example.ru', 'test@example.org.ru', '.test@example.com', 'test.name@example.com', 'test.my-name@subdomain.example.com', 'test.text@example.comm' ); // прогоним массив и проверим каждый элемент на корректность foreach ($emails as $email) { echo $email.': '.(is_email($email) ? 'true' : '<b>false</b>').'<br>'; } ?>

Результат

На экране мы увидим следующее:

test@example.com: true<br> test@example.ru: true<br> test@example.org.ru: true<br> .test@example.com: <b>false</b><br> test.name@example.com: true<br> test.my-name@subdomain.example.com: true<br> test.text@example.comm: <b>false</b>

...или так
test@example.com: true
test@example.ru: true
test@example.org.ru: true
.test@example.com: false
test.name@example.com: true
test.my-name@subdomain.example.com: true
test.text@example.comm: false

Заключение

Функция is_email(string $email) отлично справляется с поставленной задачей.

Категории

ПрограммированиеPHPРегулярные выражения в PHPРегулярные выражения

Читайте также

Комментарии

Артём Фёдоров

Можно и так. Регулярка будет короче.

Ответить
Евгений Романенко

Перерыл в сети много страниц, этот шаблон реально рабочий! Только я убрал перечисление доменов и заменил это тем, что добавил кол-во символов после последней точки до 4-х.

Ответить