Блог студии веб-дизайна «Make a Site» Дизайн, верстка, программирование, наполнение и раскрутка сайтов.

Проверка email адреса на валидность на PHP

Довольно часто перед программистом возникает задача проверки email адреса на валидность. Речь конечно идет о самописных движках с собственными модулями авторизации, регистрации, подписки на новости или другими подобными функциями, требующих от пользователя ввода своего почтового адреса.

Проверка email адреса на валидность на PHP
Содержание статьи

Зачем проверять email на валидность?

Данная задача встает перед программистом по причине того, что довольно часто люди не могут просто взять и указать валидный email адрес, не попробовав написать какую-нибудь белеберду, чтобы легче отделаться, но мы то с вами знаем, что получить заветный email от посетителя это очень важно. В дальнейшем он может оказаться нашим клиентом и мы всегда сможем отправить ему то или иное уведомление, чтобы лишний раз привлечь внимание и подтолкнуть к повторному посещению нашего ресурса. Преимущества генерации базы клиентов мы обсуждать не будем и скорее перейдем к решению поставленной в рамках данной статьи задачи.

Скрипт проверки email на валидность

Таким образом мошенников и халтурщиков можно отсекать простым регулярным выражением PHP, в котором заложен наш многолетний опыт разработки самописных движков, систем и модулей, в которых требовалась проверка email адреса.

Итак, вот непосредственно скрипт проверки:

// Validate email
if(isset($_POST['email'])) {
	preg_match_all('#([a-z0-9\-\.\_]+@[a-z0-9\-]+\.[a-z]+$)#isU', $_POST['email'], $matches);
	$_POST['email'] = implode('', $matches[1]);
	
	if($_POST['email']) {
		// Valid email
	}
	else {
		$registerError = 'Пожалуйста, укажите ваш e-mail';
	}
}

В данном регулярном выражении предусмотрены всевозможные варианты написания email адреса, в котором в первой части (до собачки) могут быть латинские буквы, цифры, тире, точки и нижние подчеркивания, адрес почтового сервера может содержать латинские символы, цифры и знаки тире, а доменное имя - только латинские символы. Наш пример игнорирует возможность существования email адреса вида ВасяПупкин@доменное-имя.рф, т.к. мы глубоко убеждены в неадекватности подобного частного случая, когда в email адресе присутствуют русские символы и более того он зарегистрирован на русскоязычном доменном уровне (столкнуться с подобным пока не доводилось). Однако, если вы считаете иначе, то с легкостью можете добавить к интервалу символов [a-z] еще и [а-я]. Мы же этого не делаем по указанной выше причине и никогда проблем с этим не испытывали.

П.С. стоит отметить, что функция preg_match_all получит пустой массив $matches в случае несоблюдения условий маски, а значит и implode вернет пустую строку, отсюда появится возможность вывода ошибки.

Как видите, проверить email на валидность посредством PHP совсем не сложно, а регулярные выражения в PHP - вещь очень мощная и довольно полезная на практике.

А вот и пример работы скрипта:

открыть в новой вкладке

П.С. Стоит отметить, что в данном примере атрибут type в поле input указан как обычный text, но современные браузеры уже давно понимают атрибут type="email" и сами производят валидацию. Однако проверка на стороне сервера все равно нужна, т.к. поддельные данные в форму могут вставить через сторонний скрипт и нельзя полагаться на одну лишь проверку на стороне клиента. Самая важная проверка - на стороне сервера и так будет всегда, не зависимо от крутости браузеров.


Предыдущая статья:
Выпадающее окно на сайте с помощью jQuery и ajax

Читайте также:
Самый простой слайдер контента на jQuery


Блог студии веб-дизайна «Make a Site».
Дизайн, верстка, программирование, наполнение и раскрутка сайтов.

Текущий проект: «Stream Booster» — раскрутка Twitch и YouTube каналов

Студия веб-дизайна «Make a site»