Отправить заявку

PHP - валидация данных без регулярных выражений.

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

Для проверки валидности, например, email можно использовалось регулярное выражение:

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

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

Array
(
    [0] => int
    [1] => boolean
    [2] => float
    [3] => validate_regexp
    [4] => validate_url
    [5] => validate_email
    [6] => validate_ip
    [7] => string
    [8] => stripped
    [9] => encoded
    [10] => special_chars
    [11] => unsafe_raw
    [12] => email
    [13] => url
    [14] => number_int
    [15] => number_float
    [16] => magic_quotes
    [17] => callback
)

Пример:

var_dump(filter_var('spama@artkiev.com', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('spama@artkiev.com', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('www.artkiev.com', FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));
var_dump(filter_var('', FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));

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

string(17) "spama@artkiev.com"
bool(false)
bool(false)
string(18) "http://artkiev.com"

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

Другие публикации