Filter list: примеры (PHP)

Использование filter_list для работы с фильтрами данных в PHP
Раздел: Фильтрация данных
filter_list: array

Основные сведения о функции filter_list

Назначение функции

Функция filter_list в языке PHP возвращает перечень всех доступных в системе фильтров для валидации и санитизации данных. Она не принимает аргументов. Основное применение — получение списка идентификаторов фильтров, которые затем можно использовать с функциями filter_var или filter_input.

Возвращаемое значение

Функция возвращает ассоциативный массив, где ключами выступают имена фильтров (константы, например FILTER_VALIDATE_EMAIL), а значениями — их человеко-читаемые названия. Если фильтры недоступны, функция вернет пустой массив.

Краткие примеры использования

Получение списка фильтров

Пример вывода всех доступных фильтров:

<?php
$filters = filter_list();
print_r($filters);
?>
Array
(
    [int] => int
    [boolean] => boolean
    [float] => float
    [validate_regexp] => validate_regexp
    [validate_url] => validate_url
    [validate_email] => validate_email
    // ... остальные фильтры
)
Использование с filter_var

Пример проверки email с использованием полученного списка:

<?php
if (isset(filter_list()['validate_email'])) {
    $result = filter_var('test@example.com', FILTER_VALIDATE_EMAIL);
    echo $result; // test@example.com
}
?>
test@example.com

Похожие функции в PHP

filter_id

Функция filter_id возвращает идентификатор фильтра по его имени. Используется для конвертации строкового имени фильтра в числовую константу.

get_defined_functions

Функция get_defined_functions возвращает массив всех определенных функций, но не специфична для фильтров данных.

Сравнение

filter_list полезна для динамического получения списка фильтров, в то время как filter_id применяется для получения конкретного идентификатора. При статическом коде предпочтительнее использовать прямые константы FILTER_*.

Альтернативы в других языках

Filter list в Python

В Python нет прямой аналогии, но валидация часто выполняется через модуль validators или регулярные выражения.

import validators
result = validators.email('test@example.com')
print(result)  # True
True

Filter list в Javascript

В JavaScript используются регулярные выражения или API валидации HTML5.

const email = 'test@example.com';
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
console.log(regex.test(email));
true

Filter list в MySQL

В MySQL проверка данных обычно выполняется через условия WHERE или триггеры, без аналога filter_list.

Типичные ошибки

Игнорирование возвращаемого типа

Ошибка: попытка использовать возвращаемые имена фильтров как константы.

<?php
$filters = filter_list();
// Неправильно:
$result = filter_var('123', $filters['int']);
?>
Warning: filter_var() expects parameter 2 to be int, string given
Предположение о неизменности списка

Список фильтров может меняться между версиями PHP, что приводит к ошибкам в динамическом коде.

Изменения в последних версиях PHP

PHP 8.0

В PHP 8.0 добавлен фильтр FILTER_VALIDATE_BOOL как псевдоним FILTER_VALIDATE_BOOLEAN, что отражается в выводе filter_list.

PHP 8.1

Появился фильтр FILTER_VALIDATE_DOMAIN для проверки доменных имен.

PHP 8.2

Добавлен фильтр FILTER_VALIDATE_IP с флагом FILTER_FLAG_IPV4 и FILTER_FLAG_IPV6 для раздельной проверки.

Расширенные примеры применения

Динамическая валидация данных

Пример динамического выбора фильтра на основе типа данных:

Пример php
<?php
function dynamic_validate($value, $filter_name) {
    $filters = filter_list();
    if (array_key_exists($filter_name, $filters)) {
        $filter_id = filter_id($filter_name);
        return filter_var($value, $filter_id);
    }
    return false;
}

echo dynamic_validate('user@domain.com', 'validate_email'); // user@domain.com
echo dynamic_validate('not-email', 'validate_email'); // false
?>
user@domain.com
Создание пользовательского интерфейса

Генерация выпадающего списка фильтров для формы администрирования:

Пример php
<?php
$filters = filter_list();
echo '<select name="filter">';
foreach ($filters as $id => $name) {
    echo "<option value='$id'>$name</option>";
}
echo '</select>';
?>
<select name="filter">
    <option value='int'>int</option>
    <option value='boolean'>boolean</option>
    // ... остальные фильтры
</select>
Проверка поддержки фильтров

Пример проверки наличия специфичного фильтра перед использованием:

Пример php
<?php
$required_filter = 'validate_mac';
$filters = filter_list();

if (!array_key_exists($required_filter, $filters)) {
    exit("Фильтр $required_filter не поддерживается");
}

// Безопасное использование фильтра
$mac = '00:00:5e:00:53:00';
$result = filter_var($mac, FILTER_VALIDATE_MAC);
?>
00:00:5e:00:53:00

PHP filter_list function comments

En
Filter list Returns a list of all supported filters