A sample text widget

Etiam pulvinar consectetur dolor sed malesuada. Ut convallis euismod dolor nec pretium. Nunc ut tristique massa.

Nam sodales mi vitae dolor ullamcorper et vulputate enim accumsan. Morbi orci magna, tincidunt vitae molestie nec, molestie at mi. Nulla nulla lorem, suscipit in posuere in, interdum non magna.

Валидация данных без регулярных выражений на примере проверки 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.