PHP: Фильтрация входных данных PHP
PHP начиная от версии 5.2.0 встроено расширение для валидации и нормализации значений, именно его мы и будем использовать.В использовании, эта библиотека очень проста. Рассмотрим небольшой пример ....
в PHP начиная от версии 5.2.0 встроено расширение для валидации и нормализации значений, именно его мы и будем использовать.
В использовании, эта библиотека очень проста. Рассмотрим небольшой пример проверки email:
if (filter_var('roman@nazarkin.su', FILTER_VALIDATE_EMAIL)) echo "E-mail указан верно"; else echo "E-mail указан НЕ верно!";<br>
Таким образом мы избавляемся от необходимости использовать регулярные выражения для проверки email пользователя.
Идем дальше. Проверим IP адрес пользователя:
if (filter_var('127.0.0.1', FILTER_VALIDATE_IP)) echo "Все верно!"; else echo "IP адрес имеет неверное значение!";<br>
Просто, не правда ли? Попробуем что-нибудь по сложнее - проверка чисел в заданном интервале:
$options = array( 'options' => array( 'min_range' => 3, 'max_range' => 6, ) ); if (filter_var(5, FILTER_VALIDATE_INT, $options) !== FALSE) echo "Число является верным (от 3 до 6)"; else echo "Число не верно или находится вне заданного интервала!";<br>
Теперь посмотрим список доступных фильтров:
- int (альтернатива функции is_int() )
- boolean
- float
- validate_regexp
- validate_url (уже хорошо :) )
- validate_email
- validate_ip
- string
- stripped
- encoded
- special_chars (вот это нужная вещь)
- unsafe_raw
- url
- number_int
- number_float
- magic_quotes
- callback
Далее разберем функционал нормализации значений:
$sanitized_c = filter_var('blabla(bogus@email.com)bla', FILTER_SANITIZE_EMAIL); if (filter_var($sanitized_c, FILTER_VALIDATE_EMAIL)) { echo "Нормализованный e-mail является верным.n"; echo "До нормализации: blabla(bogus@email.com)blan"; echo "После нормализации: $sanitized_cn"; } else echo "Неверный E-mail!";<br>
C помощью этой функции, как вы поняли, можно вырезать все ненужные символы из строки, а также выцеплять из нее нужные значения, например email.
Скорость работы:
Проверка email функцией filter_var - 0.00017 секунд
Проверка email с помощью рег. выражения - 0.000004 секунды
Т.е. получается, что с расширением работа идет медленнее, НО проще и безопасней.