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
// ... остальные фильтры
)Пример проверки 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 возвращает идентификатор фильтра по его имени. Используется для конвертации строкового имени фильтра в числовую константу.
Функция get_defined_functions возвращает массив всех определенных функций, но не специфична для фильтров данных.
filter_list полезна для динамического получения списка фильтров, в то время как filter_id применяется для получения конкретного идентификатора. При статическом коде предпочтительнее использовать прямые константы FILTER_*.
Альтернативы в других языках
Filter list в Python
В Python нет прямой аналогии, но валидация часто выполняется через модуль validators или регулярные выражения.
import validators
result = validators.email('test@example.com')
print(result) # TrueTrue
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 добавлен фильтр FILTER_VALIDATE_BOOL как псевдоним FILTER_VALIDATE_BOOLEAN, что отражается в выводе filter_list.
Появился фильтр FILTER_VALIDATE_DOMAIN для проверки доменных имен.
Добавлен фильтр FILTER_VALIDATE_IP с флагом FILTER_FLAG_IPV4 и FILTER_FLAG_IPV6 для раздельной проверки.
Расширенные примеры применения
Пример динамического выбора фильтра на основе типа данных:
<?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
$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
$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