W3docs

filter_id()

Как функция filter_id() в PHP преобразует имя фильтра в числовой ID: синтаксис, возвращаемые значения, примеры и типичные ошибки.

Введение

filter_id() — небольшая, но удобная функция PHP, которая выполняет одну задачу: принимает имя фильтра (строку вида "validate_email") и возвращает числовой ID этого фильтра — целое число, которое на самом деле хранится за константами FILTER_VALIDATE_EMAIL, FILTER_SANITIZE_STRING и им подобными.

По сути, она является обратной к filter_list(), которая возвращает список имён фильтров. К filter_id() обращаются тогда, когда имя фильтра задано в виде строки — как правило, из конфигурации, базы данных или пользовательского ввода — и нужно получить целое число, которое ожидают filter_var() и filter_input().

На этой странице рассматриваются синтаксис, возвращаемые значения, работающий пример и наиболее распространённая ошибка при использовании функции.

Синтаксис

filter_id(string $name): int|false

Функция принимает один параметр:

  • $nameимя фильтра в виде строки, например "validate_int", "validate_email", "sanitize_email". Это строчные имена, возвращаемые filter_list(), а не имена констант FILTER_*.

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

Передавайте имя фильтра, а не имя константы

Именно здесь чаще всего ошибаются. Аргументом является короткое строчное имя фильтра — не константа FILTER_VALIDATE_EMAIL и не строка "FILTER_VALIDATE_EMAIL".

<?php

var_dump(filter_id('validate_email'));        // int(274)  ✅ correct name
var_dump(filter_id('FILTER_VALIDATE_EMAIL')); // bool(false) ❌ that is the constant, not the name
var_dump(filter_id('not_a_real_filter'));     // bool(false) ❌ unknown name

Поскольку неизвестное имя возвращает false, всегда проверяйте результат перед его использованием в качестве ID фильтра. В противном случае значение false будет молча приведено к 0, если передать его туда, где ожидается целое число.

Практический пример

Реальный сценарий использования: пользователь выбирает правило валидации по имени (из формы, конфигурационного файла или API-запроса), и его нужно применить динамически. filter_id() превращает это имя в ID, который требуется filter_var().

<?php

$ruleName = 'validate_email';          // could come from user input or config
$value    = '[email protected]';

$filterId = filter_id($ruleName);

if ($filterId === false) {
    echo "Unknown filter: $ruleName";
} elseif (filter_var($value, $filterId) !== false) {
    echo "'$value' passed the '$ruleName' filter (id $filterId).";
} else {
    echo "'$value' failed the '$ruleName' filter.";
}
// Output: '[email protected]' passed the 'validate_email' filter (id 274).

Обратите внимание на строгую проверку === false: корректный фильтр, например int, имеет ID 257, который является истинным, однако использование нестрогой проверки на истинность всё равно неправильно обработало бы неизвестный фильтр. Явное сравнение с false позволяет чётко разграничить оба случая.

Поиск допустимых имён фильтров

Чтобы узнать, какие именно имена принимает filter_id(), выполните итерацию по результату filter_list():

<?php

foreach (filter_list() as $name) {
    echo $name . ' => ' . filter_id($name) . PHP_EOL;
}
// int => 257
// boolean => 258
// validate_email => 274
// validate_url => 273
// sanitize... and so on

Когда применять

  • Динамическая валидация — когда применяемый фильтр определяется во время выполнения из строки.
  • Сопоставление конфигурации с фильтрами — преобразование понятных человеку имён правил из конфигурационного файла в ID, которые требуются filter_var() / filter_input().
  • Интроспекция / инструментарий — вывод списка доступных фильтров и их ID.

Если фильтр известен на этапе написания кода, не используйте filter_id() — применяйте константу напрямую (filter_var($email, FILTER_VALIDATE_EMAIL)): это нагляднее и исключает лишний поиск.

Связанные функции

  • filter_list() — получить все поддерживаемые имена фильтров.
  • filter_var() — отфильтровать одну переменную по ID фильтра.
  • filter_input() — отфильтровать значение из источника ввода.
  • php-filters — обзор расширения фильтров PHP.

Практика

Практика
Какова цель функции filter_list() в PHP?
Какова цель функции filter_list() в PHP?
Was this page helpful?