«Моя территория мысли»

Валидация email на PHP и не только

  • Разработка

  • 6 Март 2017

  • 133

  • 0

Валидация email на PHP и не только

За годы своей практики, я повстречал большое количество разного рода валидаторов и фильтров, да и кто из нас «велосипедистов» не грешил подобным? Безусловно многие, а все от чего? От того, что плохо знакомы с инструментом, на котором пишем. У меня буквально на днях был случай, я забивал дюбель в стену расческой, с задачей расческа справилась, вот только это странно, не находите? Знакомимся с инструментом ближе в статье...

Что мы чаще всего валидируем в контроллерах, при авторизации, регистрации, сброса пароля и подобных действиях? Разумеется электронный адрес пользователя, и тут перед нами открываются миллионы решений, и ладно бы просто где-то на просторах сети, но даже на весьма серьезных ресурсах, таких как «Хабрахабр» и ему подобных, где люди на полном серьезе, предлагают самые абсурдные решения, сложные, тяжелые и в конце концов не надежные. Хотя конечно встречал статью, где автор предлагал просто проверить существование в строке символа «@», это очень просто, вот только сомнительно весьма. Ну да ладно, давайте обратимся к стандартным средствам PHP которые, хочется отметить, доступны с версии 5.2.

$email = 'test@example.net';

if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
	return true;
}

Представьте себе, это все что требуется, буквально одна строчка кода, это уже встроено в PHP, что более чем логично, ведь язык направлен на веб разработку.

Отдельно по электронному адресу, стоит отметить еще вот что, я часто вижу востребованность со стороны PHP сообщества проверять не только корректность электронного адреса, но и существование доменного имени, правильнее сказать, резонность отправки письма на него. Скажу сразу, проверить существования самого электронного адреса на сервере, вы не сможете, однако можете проверить существование MX записи у домена, которая отвечает за прием электронной корреспонденции, делается это весьма просто, тут главное получить доменное имя, например таким образом:

$domain = ltrim(strstr($email, '@'), '@');

Далее, как я писал выше, необходимо проверить MX запись у доменного имени, например следующим образом:

if (checkdnsrr($domain, 'MX'))
{
	return true;
}

Готовый пример вы можете посмотреть по ссылке.

Также настоятельно рекомендую изучить следующий раздел из официальной документации: Фильтрация данных.

Нативные функции которые были использованы:
filter_var
checkdnsrr

Спасибо за внимание!

Комментарии