Перейти к содержимому

Сервис обмена электронных валют


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

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 26 Ноябрь 2010 - 23:26

Фильтры данных впервые появились в 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));


Оригинал статьи и обсуждение.

 

 

  • 0

#2 Art-corp

Art-corp
  • Пользователь
  • 1 сообщений
  • Репутация: 0

Отправлено 27 Ноябрь 2010 - 00:51

Спасибо, интересно было почитать. Раньше про фильтры не слышал.
Хорошо бы прочитать мануал на русском - с английским не дружу.

Честно говоря, привык уже к регуляркам, считаю, что они более гибки и определённо универсальнее.
  • 0

#3 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 27 Ноябрь 2010 - 14:51

surfer, фильтры как уже сказали построены на тех же самых регулярках, только имеют красивую обертку. Данные функции писали тоже люди, и они что-то пропустить или написать неправильно. Так же нет поддержки кириллицы ди и вообще национальных языков к примеру в email'ах, а ведь сейчас национальные домены переживают пик популярности :)
Они никогда не заменят регулярки, т.к. на регулярках можно прописать любую конструкцию на проверку. Тут же использются четко определенные константы. Конечно кто-то может сказать "а кто нам мешает добавить своих констант со своими шаблонами регулярок?", я отвечу - а кто нам мешает тоже самое сделать с регулярками.
Данные функции ничего не заменяют, они обертывают регулярки для определенных нужд: проверки, фильтрации, обработки. Ничем они не лучше регулярок, за исключением (в некоторых случаях) наличием уже предопределенных шаблонов проверки, фильтрации и т.п.
  • 0


Оформление форума – IPBSkins.ru