filter_id()
Aprende cómo filter_id() de PHP convierte un nombre de filtro en su ID entero, con ejemplos, valores de retorno y errores comunes.
Introducción
filter_id() es una función PHP pequeña pero útil que hace una sola cosa: toma un nombre de filtro (una cadena como "validate_email") y devuelve el ID numérico de ese filtro — el entero que las constantes FILTER_VALIDATE_EMAIL, FILTER_SANITIZE_STRING y similares almacenan internamente.
Es esencialmente la inversa de filter_list(), que te da la lista de nombres de filtros. Usas filter_id() cuando tienes el nombre de un filtro como cadena — típicamente desde una configuración, una base de datos o entrada del usuario — y necesitas el entero que filter_var() y filter_input() esperan.
Esta página cubre la sintaxis, los valores de retorno, un ejemplo ejecutable y el error más común que comete la gente con esta función.
Sintaxis
filter_id(string $name): int|falseAcepta un único parámetro:
$name— el nombre del filtro como cadena, p. ej."validate_int","validate_email","sanitize_email". Estos son los nombres en minúsculas que devuelvefilter_list(), no los nombres de las constantesFILTER_*.
Devuelve el ID entero del filtro correspondiente, o false si ningún filtro tiene ese nombre.
Pasa el nombre del filtro, no el nombre de la constante
Esta es la parte que confunde a la gente. El argumento es el nombre corto del filtro en minúsculas — no la constante FILTER_VALIDATE_EMAIL ni la cadena "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 nameDado que un nombre desconocido devuelve false, comprueba siempre el resultado antes de usarlo como ID de filtro. Un false se coercionaría silenciosamente a 0 si se pasa donde se espera un entero.
Un ejemplo práctico
Un caso de uso realista: permites que los usuarios elijan una regla de validación por nombre (desde un formulario, un archivo de configuración o una solicitud de API) y necesitas aplicarla dinámicamente. filter_id() convierte ese nombre en el ID que necesita 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).Observa la comprobación estricta === false: un filtro válido como int tiene el ID 257, que es verdadero, pero confiar en la veracidad flexible seguiría manejando mal un filtro desconocido. Comparar explícitamente con false mantiene los dos casos distintos.
Descubrir nombres de filtros válidos
Para ver exactamente qué nombres acepta filter_id(), itera sobre 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 onCuándo usarla
- Validación dinámica — cuando el filtro a aplicar se decide en tiempo de ejecución a partir de una cadena.
- Mapear configuración a filtros — convertir nombres de reglas legibles por humanos en un archivo de configuración en los IDs que requieren
filter_var()/filter_input(). - Introspección / herramientas — listar los filtros disponibles y sus IDs.
Si ya conoces el filtro en el momento de escribir el código, omite filter_id() y usa la constante directamente (filter_var($email, FILTER_VALIDATE_EMAIL)) — es más claro y evita una búsqueda.
Funciones relacionadas
filter_list()— obtiene todos los nombres de filtros compatibles.filter_var()— filtra una variable por ID de filtro.filter_input()— filtra un valor proveniente de una fuente de entrada.php-filters— descripción general de la extensión de filtros de PHP.