PHP Учебник

PHP Старт Введение в PHP Установка PHP Синтаксис PHP Комментарии в PHP Переменные PHP PHP Echo / Print Типы данных PHP Строки PHP Числа PHP Математика в PHP Константы PHP Операторы PHP PHP If...Else...Elseif PHP Switch Циклы в PHP Функции PHP Массивы PHP PHP Суперглобальные PHP RegEx

PHP Формы

Обработка форм PHP Валидация форм PHP Обязательные поля Валидация URL/E-mail Полная форма PHP

PHP Продвинутый

PHP Дата и время PHP Include/Require PHP Работа с файлами Открытие/Чтение файлов Создание/Запись файлов PHP Загрузка файлов Файлы cookie PHP Сессии PHP Фильтры PHP Расширенные фильтры PHP Функция Callback PHP JSON PHP Исключения

PHP OOP

Что такое ООП в PHP Классы/Объекты PHP Цепочки методов PHP Конструктор PHP Деструктор PHP Модификаторы доступа Наследование в PHP Константы класса PHP Подсказка типов PHP Подсказка интерфейсов Абстрактные классы PHP PHP Интерфейсы PHP Полиформизм PHP Трейты Статические методы PHP Статические свойства PHP Пространства имен PHP Итерируемые объекты

База данных MySQL

База данных MySQL Подключение к MySQL Создание БД MySQL Создание таблицы MySQL Вставка данных MySQL Получить ID MySQL Подготовленные операторы PHP MySQL Получение данных MySQL Предложение WHERE Предложение ORDER BY Обновление данных MySQL Удаление данных БД MySQL Limit Data

PHP XML

Парсеры PHP XML Парсер PHP SimpleXML Получить PHP SimpleXML PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Введение AJAX PHP AJAX База Данных AJAX XML AJAX Живой поиск AJAX Опрос

PHP Примеры

PHP Примеры Практика ООП PHP PHP квиз-тест Упражнения Базовый PHP Упражнения Алгоритмы Упражнения Массивы Упражнения Цикл for Упражнения Функции Регулярные выражения Упражнения Дата PHP Упражнения Строки PHP Математика PHP Упражнения Формы PHP Упражнения Классы PHP Упражнения JSON PHP PHP Задачник


Расширенные фильтры PHP




В предыдущем уроке мы научились выполнять валидацию различных переменных PHP используя два параметра функции filter_var(): var (переменная, которую вы хотите проверить) и filtername (идентификатор или имя используемого фильтра). Сегодня мы расширим возможности функции filter_var() с помощью третьего параметра options, который используется для указания одного или нескольких флагов/параметров применения.


Параметр 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("Значение переменной находится в допустимом диапазоне");
}
?>

Работая с различными проектами часто возникает необходимость отфильтровать от обычных 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-адресом");
}
?>

Строка запроса (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 обозначает «Американский Стандартный Кодекс для информационного Обмена» (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;
?>