Расширенные фильтры PHP
В предыдущем уроке мы научились выполнять валидацию различных переменных PHP используя два параметра функции filter_var()
: var
(переменная, которую вы хотите проверить) и filtername
(идентификатор или имя используемого фильтра). Сегодня мы расширим возможности функции filter_var()
с помощью третьего параметра options
, который используется для указания одного или нескольких флагов/параметров применения.
Параметр options функции filter_var()
Параметр options
функции filter_var()
— это ассоциативный массив параметров или логическая дизъюнкция (операция ИЛИ) флагов. Если фильтр принимает параметр options
, флаги могут быть указаны в поле "flags" массива. Для фильтра "callback" необходимо передать вызываемый тип. Фильтр "callback" должен принимать один аргумент, значение, которое нужно отфильтровать, и возвращать значение после его фильтрации/очистки:
Пример
<?php
/* используйте этот формат для фильтров с дополнительными параметрами */
$options = array(
'options' => array(
'default' => 3, /* значение, возвращаемое, если фильтрация завершилась неудачей */
/* другие параметры */
'min_range' => 0
),
'flags' => FILTER_FLAG_ALLOW_OCTAL,
);
$var = filter_var('0755', FILTER_VALIDATE_INT, $options);
/* для фильтра, который принимает только флаги, вы можете передать их непосредственно */
$var = filter_var('oops', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
/* для фильтра, который принимает только флаги, вы так же можете передать их как массив */
$var = filter_var('oops', FILTER_VALIDATE_BOOLEAN,
array('flags' => FILTER_NULL_ON_FAILURE));
/* callback-фильтр валидации */
function foo($value)
{
/* Ожидаемый формат: Фамилия, Имена */
if (strpos($value, ", ") === false) return false;
list($surname, $givennames) = explode(", ", $value, 2);
$empty = (empty($surname) || empty($givennames));
$notstrings = (!is_string($surname) || !is_string($givennames));
if ($empty || $notstrings) {
return false;
} else {
return $value;
}
}
$var = filter_var('Doe, Jane Sue', FILTER_CALLBACK, array('options' => 'foo'));
?>
Проверить целое число в диапазоне
В следующем примере проверяется, является ли предоставленное значение целым числом или нет, а также находится ли оно в диапазоне от 0 до 100. Для проверки того, лежит ли число в установленном диапзоне воспользуемся третьим параметром функции filter_var()
options. Ограничения установленного диапазона для целого числа пропишем в массиве array("options" => array("min_range" => 0,"max_range" => 100))
:
Пример
Попробуй сам »<?php
$int = 75;
$min = 1;
$max = 100;
if (filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) {
echo("Значение переменной находится за пределами допустимого диапазона");
} else {
echo("Значение переменной находится в допустимом диапазоне");
}
?>
Подтвердить адрес IPv6
Работая с различными проектами часто возникает необходимость отфильтровать от обычных IP-адресов IPv4 или IPv6-адреса. IPv6-адрес (англ. Internet Protocol Version 6 address) — цифровая метка, используемая для идентификации сетевого интерфейса компьютера или любого другого сетевого узла, работающего в IPv6-сети. В отличие от обычных IP-адресов вроде 193.169.0.3, IPv6-адрес имеет вид вроде 2005:0db7:86a3:0000: 0000:8a2e:0570:7534.
В следующем примере, для проверки является ли переменная $ip допустимым адресом IPv6, воспользуемся флагом FILTER_FLAG_IPV6
функции filter_var()
:
Пример
Попробуй сам »<?php
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
echo("$ip это действительный адрес IPv6");
} else {
echo("$ip не является действительным IPv6-адресом");
}
?>
Подтвердить URL-адрес со строкой запроса
Строка запроса (Query string) является частью унифицированного указателя ресурса (URL) , который присваивает значения указанных параметров. Строка запроса обычно включает поля, добавленные к базовому URL-адресу веб-браузером или другим клиентским приложением, например, как часть HTML-формы.
Типичный URL-адрес, содержащий строку запроса, выглядит следующим образом: https://wm-school.ru/over/there?name=generat
Когда сервер получает запрос на такую страницу, он может запустить программу, передав ей строку запроса, которая в данном случае остается name=generat
неизменной. Знак вопроса используется как разделитель и не является частью строки запроса.
В следующем примере, для проверки является ли переменная $url URL-адресом со строкой запроса, воспользуемся флагом FILTER_FLAG_QUERY_REQUIRED
функции filter_var()
:
Пример
Попробуй сам »<?php
$url = "https://wm-school.ru";
if (!filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED) === false) {
echo("$url - это URL со строкой запроса");
} else {
echo("$url - не является URL-адресом со строкой запроса");
}
?>
Удалить символы со значением ASCII > 127
ASCII обозначает «Американский Стандартный Кодекс для информационного Обмена» (American Standard Code for Information Interchange). Он был разработан в начале 60-х годов 20-го века как стандартная кодировка для компьютеров и аппаратных устройств. Подробнее о Кодировке ASCII
В следующем примере, для удаления символов со значением ASCII > 127, воспользуемся флагом FILTER_FLAG_STRIP_HIGH
функции filter_var()
:
Пример
Попробуй сам »<?php
$str = "<h1>Hello WorldÆØÅ!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
echo $newstr;
?>