Хочу рассказать Вам все о сайтах, что узнал сам за 15 лет.
Блог Виталия Жукова Vitalik.WS Свой сайт с нуля - легко!
Обо мне, как об авторе блога.
Подробнее
Vitalik.WSЗаметки → Проверка валидности/правильности email при помощи PHP

Проверка валидности/правильности email при помощи PHP
Заметка на тему: Уроки, PHP

Проверять данные обработчиком на стороне сервера всегда полезно, а в некоторых случаях жизненно необходимо, так как это поможет избежать множество проблем в будущем. В данном случае я расскажу как нужно правильно делать проверку e-mail на валидность (правильность) при помощи PHP. Я расскажу 2 способа, один из которых уже устарел, а второй относительно недавно начал использоваться многими php программистами. Начнем по порядку с устаревшего.

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

И начну я с описание с того, как именно этот способ проверяет емейл и почему его сейчас лучше не использовать.

Как же он проверяет почту? А делается это примерно вот так:
$email = ''; //входящая строка, в которой может быть все, что угодно, а должна быть почта
if (preg_match("/^(?:[a-z0-9]+(?:[-_.]?[a-z0-9]+)?@[a-z0-9_.-]+(?:\.?[a-z0-9]+)?\.[a-z]{2,5})$/i", $email))
{
  //все ОК, email правильный
}
else
{
  //проверка email на правильность НЕ пройдена
}

Где проверяется с помощью регулярного выражения, соответствует ли содержимое переменной $email шаблону email'а вида "СИМВОЛЫ@СИМВОЛЫ.ДОМЕН".

Почему его лучше не использовать сейчас? Главный минус этой регулярки в том, что её нужно постоянно корректировать в соответствии с изменениями в названиях email. Самый яркий пример этого: домены с русскими именами, например в зоне ".рф". Регулярное выражение выше уже не пропустит емейл типа виталик@почта.рф, так как там забито условие a-z0-9_.- (самое обширное), то есть правильными будут признаны только те названия почт, которые будут содержать английские символы, цифры, земля, точка и пробел. Все остальные будут отсеяны как не правильные.

В общем я бы советовал использовать проверку регуляркой только тем, кто понимает, что она делает и хочет получить какой-то частный результат.

Новый способ проверки правильности e-mail на PHP при помощи базовой функции языка

Этот способ появился относительно недавно, когда разработчики языка PHP ввели функцию filter_var, которая сама проверяет, является ли введенная строка почтой или нет. Вот как это делается с её помощью:
//входящая строка, в которой может быть все, что угодно, а должна быть почта
$email = '';
if (filter_var($email, FILTER_VALIDATE_EMAIL) !== false)
{
  //все ОК, email правильный
}
else
{
  //проверка email на правильность НЕ пройдена
}

Я советую использовать вам именно этот способ, так как единожды поставив такую проверку в код, в будущем вы будете уверены, что она работает как нужно. Разработчики языка PHP сами внесут нужные корректировки в новых версиях.

Дополнение. Никогда не доверяйте одной лишь проверке. Всегда пытайтесь подстраховываться. Например при выводе почты пользователю через HTML можно дополнительно пропустить эту почту через htmlspecialchars(). Операция не сильно ресурсоемкая, а тем не менее за эту часть кода будет спокойнее.

Все комментарии к заметке "Проверка валидности/правильности email при помощи PHP"

  • Комментариев еще нет.
    Оставьте свой комментарий первым!
Написать свой комментарий:
Отправить
ВНИМАНИЕ! Пожалуйста НЕ пишите в комментариях рекламу, оскорбления, бессмыслицу и прочие проявления интернет-нечисти, так как эти сообщения всеравно не будут опубликованы. Пишите исключительно по теме и ваш комментарий обязательно будет опубликован, а возможно и прокомментирован.
 Подписывайтесь на мой блог
Хотите первыми узнавать о самом интересном? Тогда подпишитесь на рассылку новостей.
Подписаться
Подписавшись на рассылку, Вы всегда будете в первую очередь узнавать о самой важной и полезной для блоггеров и веб-мастеров информации.