PHP
19 November 2010

Фильтры: смерть регуляркам и правильная валидация

Фильтры данных впервые появились в PHP 5.0, и по какому-то стечению обстоятельств остались незамечеными большй частью кодеров. Наверное, это можно объяснить отсутствием чего-нибудь подобного в PHP4, а может просто мануал плохо читали. Я тоже узнал про них случайно… А ведь эта замечательная функция позволяет избавиться от запутаных, и подчас некорректных, регулярных выражений, при выполнении типичных задач.
Мануал по фильтрам находится здесь. Приведу только основную информацию и пару практичных примеров.

Ближе к делу


Во-первых, фильтры разделены на 3 типа:
  1. Validate Filters — проверяющие фильтры
  2. Sanitize Filters — обезопашивающие фильтры
  3. Other Filters — другие фильтры

Фильтры первого типа проверяют соответствие строки фильтру. Ответ от такого фильтра — исходная строка в случае удачи или false.
Фильтры второго типа обрабатывают строку и возвращают её в отфильтрованном виде.
Третий тип включает только один фильтр — FILTER_CALLBACK, который передаст строку пользовательской функции и вернет её ответ.

Основная функция для работы с фильтрами — filter_var:
mixed filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] )

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

На последок — пара примеров работы:

// Проверка e-mail
$var = 'mail@example.com';
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
$var = 'mail@exa_mple.com';
var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));

// Проверка IP
$var = '2001:471:1f11:251:290:27ff:fee0:2093';
// Это IPv4?
var_dump(filter_var($var, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4));
// Может, это IPv6?
var_dump(filter_var($var, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));

+85
21.1k 206
Comments 93
Top of the day