02.08.2019 09:31:00
Часто требуется проверить значение переменной на соответствие определенному фильтру. Например, Вы из формы получаете электронную почту, и должны убедиться что она написана правильно, что она валидна. Можно это делать через JS, а можно и в обработчике самой формы через PHP. Такой вариант мы и рассмотрим.
Для этого мы будем использовать функцию filter_var, которая фильтрует переменную с помощью определенного фильтра.
filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] ) : mixed
Согласно документации она принимает следующие параметры.
variable
Значение переменной для фильтрации. Обратите внимание, что скалярные значения перед фильтрацией преобразуются к строкам.
filter
Идентификатор (ID) применяемого фильтра. На странице Типы фильтров приведен список доступных фильтров.
Если не указан, то используется FILTER_DEFAULT, который равнозначен FILTER_UNSAFE_RAW. Это значит, что по умолчанию не применяется никакого фильтра.
options
Ассоциативный массив параметров либо логическая дизъюнкция (операция ИЛИ) флагов. Если фильтр принимает параметры, флаги могут быть указаны в элементе массива "flags". Для фильтра "callback" должен быть указан тип callable. Фильтр "callback" должен принимать один аргумент, значение для фильтрации, и возвращать значение после фильтрации.
Нас интересует параметр filter. Если он не задан, фильтрация не произойдет. Какие есть варианты фильтров?
Их 4 типа:
1) Фильтры валидации данных. Мы посмотрим пару значений.
FILTER_VALIDATE_BOOLEAN - проверяет на логическое значение. Если он увидит в строке значение "1", "true", "on" и "yes" - то будет true, в других случая false.
FILTER_VALIDATE_EMAIL - Проверяет, что значение является корректным e-mail.
2) Очищающие фильтры. Их немного, но посмотрим одну.
FILTER_SANITIZE_STRING - Удаляет теги, при необходимости удаляет или кодирует специальные символы.
Согласитесь по описанию она похоже на функцию strip_tags, но не совсем. Посмотрим пример.
<?
$smaller = "not a tag < 5";
echo strip_tags($smaller); // -> not a tag < 5
echo filter_var ( $smaller, FILTER_SANITIZE_STRING); // -> not a tag
?>
Как видите, она может удалять специальные символы
3) Остальные фильтры. Это когда мы задаем свою функцию обработки для фильтра. По сути она имеет только одно значение
FILTER_CALLBACK.
Теперь рассмотрим применения фильтра на примере проверки электронной почты.
<?
$email = 'info@site-ontop.ru';
$valid = filter($email, FILTER_VALIDATE_EMAIL);
if ($valid){
echo "Почта валидная";
}else{
echo "Почта не валидная";
}
?>
Скрипт покажет, что такая почта валидная. Теперь давайте ошибемся в почте
<?
$email = 'info@site-ontop';
$valid = filter($email, FILTER_VALIDATE_EMAIL);
if ($valid){
echo "Почта валидная";
}else{
echo "Почта не валидная";
}
?>
Скрипт покажет, что почта не валидна.
Так что при создании формы можно сделать проверку данных и через JS и через PHP.