Реклама на сайте

Баннеры

Участник Blograte.ru Участник планеты Developers.org.ua
Форум блоггеров
Каталог "Тематических Блогов Рунета"

Валидация данных без регулярных выражений на примере проверки email адреса

Любой разработчик сталкивается с созданием форм, а вместе с этим приходит и необходимость проверять введенные пользователем данные. Ближайший пример — комментарии внизу этого поста. Раньше для проверки валидности, например, email использовалось регулярное выражение типа этого:

"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"

Теперь же необходимость использовать регулярные выражения, которые неслабо нагружают сервер, в такой задаче исчезла. Исчезла она в php версии 5.2, хотя я настоятельно рекомендую обновиться до последней.

Проверка данных теперь сводится к применению функции filter_var. Как понятно из названия функции валидировать мы можем не только на соответствие строки email’у, но и много чему еще: url, типы данных, IP-адрес. Данные обо всех фильтрах предоставит функция filter_list.

Как пример приведу такой небольшой тест:

var_dump(filter_var('aravak@example.by', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('ar avak@example.by', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('a.ravak@example.example2.by', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('a-ravak@example.example2.by', FILTER_VALIDATE_EMAIL));

var_dump(filter_var('www.example.com', FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));

Данные, которые вернет скрипт будут следующими:

string(17) "aravak@example.by"
bool(false)
string(27) "a.ravak@example.example2.by"
string(27) "a-ravak@example.example2.by"
bool(false)
string(18) "http://example.com"

Как Вы уже успели заметить — функция возвращает false если данные кривые или значение после проверки.
Я рассказал только о мелких возможностях данной функции, на самом деле они гораздо шире: можно проверять числа на определенный промежуток значений, указывать какие данные возвращать в случае неудачной проверки. Последнее может пригодиться для проверки форм, которые заполнять необязательно. Кстати, это все уже было мной когда-то реализовано, теперь я думаю переписать свой класс валидатора для ускорения работы проектов.
Надеюсь, данный пример поможет в особенности новичкам, ибо проверка данных дело непростое, но крайне важное.

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

Постовые:
Отличный отдых в подмосковье позволит набраться сил и забыть о городской суете.

Похожие записи

Comments are closed.