W3docs

filter_var()

PHP ofrece funciones integradas para filtrar y validar datos de entrada. Una de ellas es filter_var(), usada para filtrar y sanear valores.

Introducción

filter_var() es la herramienta integrada de PHP para validar y sanear un único valor. Validar significa comprobar si un valor coincide con la forma esperada (un correo electrónico real, un entero dentro de un rango, una URL válida) y devolver el valor si es así, o false si no lo es. Sanear significa limpiar un valor eliminando o escapando los caracteres que no corresponden.

Nunca confíes en los datos que provienen del exterior de tu script: campos de formularios, cadenas de consulta, cookies, cargas útiles de API. Procesarlos con filter_var() antes de almacenarlos, mostrarlos o actuar sobre ellos es una de las formas más sencillas de mantener tu aplicación segura y predecible. Esta página cubre la sintaxis, los dos modos (validar vs. sanear), los filtros y marcadores más comunes, y los errores habituales que confunden a los desarrolladores.

Sintaxis

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
ParámetroObligatorioDescripción
$valueEl valor a filtrar.
$filternoEl identificador del filtro a aplicar, p. ej. FILTER_VALIDATE_INT. Por defecto es FILTER_DEFAULT, que no aplica ningún filtro.
$optionsnoUn array asociativo de opciones/marcadores, o una constante de marcador individual, para ajustar el filtro.

Valor de retorno: el valor filtrado (y posiblemente convertido) si tiene éxito, o false en caso de fallo. Ten en cuenta que un filtro de validación devuelve el propio valor, por lo que siempre debes comparar con === cuando el valor válido pueda ser falsy (como 0 o una cadena vacía).

Validación de datos

La validación responde una pregunta de sí/no: ¿es aceptable este valor? El filtro devuelve el valor si tiene éxito y false en caso de fallo.

Validar una dirección de correo electrónico

php— editable, runs on the server

Los filtros de validación más útiles son:

FiltroValida
FILTER_VALIDATE_INTUn entero (opcionalmente dentro de min_range/max_range).
FILTER_VALIDATE_FLOATUn número de punto flotante.
FILTER_VALIDATE_BOOLEAN"1", "true", "on", "yes"true; "0", "false", "off", "no", ""false.
FILTER_VALIDATE_EMAILUna dirección de correo electrónico.
FILTER_VALIDATE_URLUna URL.
FILTER_VALIDATE_IPUna dirección IPv4/IPv6.
FILTER_VALIDATE_REGEXPUn valor que coincide con un patrón PCRE.

La trampa de === false

Dado que un filtro de validación devuelve el valor, un resultado de 0 o "0" es válido pero falsy. Usa siempre una comparación estricta:

php— editable, runs on the server

Saneamiento de datos

El saneamiento no rechaza un valor, sino que lo limpia y devuelve la cadena saneada.

Sanear una dirección de correo electrónico

php— editable, runs on the server

Filtros de saneamiento comunes:

FiltroEfecto
FILTER_SANITIZE_EMAILElimina los caracteres no permitidos en un correo electrónico.
FILTER_SANITIZE_URLElimina los caracteres no permitidos en una URL.
FILTER_SANITIZE_NUMBER_INTConserva dígitos y +/-.
FILTER_SANITIZE_NUMBER_FLOATConserva dígitos, +/-, y (con marcadores) .,e.
FILTER_SANITIZE_SPECIAL_CHARSCodifica en HTML <, >, &, " y otros.
FILTER_SANITIZE_FULL_SPECIAL_CHARSSimilar a htmlspecialchars() con ENT_QUOTES.

Nota: FILTER_SANITIZE_STRING fue declarado obsoleto en PHP 8.1. Para limpiar cadenas destinadas a salida HTML, es preferible usar htmlspecialchars() en el momento de la visualización.

Uso de opciones y marcadores

El tercer argumento permite ajustar un filtro. Pásalo como un array con 'options' (y opcionalmente 'flags'):

php— editable, runs on the server

Los marcadores también pueden pasarse directamente como tercer argumento cuando no necesitas la forma de array:

php— editable, runs on the server

Validar vs. sanear — cuándo usar cada uno

  • Valida cuando necesitas una decisión de sí/no: rechazar la petición, mostrar un error, reintentar. Usa filtros de validación para correos electrónicos, números, URLs e IPs en formularios y APIs.
  • Sanea cuando debes aceptar la entrada pero quieres limpiarla de caracteres peligrosos o ajenos antes de usarla.
  • Los dos son complementarios: un patrón habitual es validar en la entrada y escapar (p. ej. con htmlspecialchars()) en la salida, en lugar de depender únicamente de los filtros de saneamiento.

Errores comunes

  • Un filtro de validación devuelve el valor, no true. Compara con === false para detectar fallos.
  • filter_var() opera sobre un único valor escalar. Para filtrar múltiples valores a la vez, usa filter_var_array() o, para datos de petición, filter_input_array().
  • FILTER_VALIDATE_BOOLEAN devuelve null (no false) para valores no reconocidos solo cuando se pasa FILTER_NULL_ON_FAILURE; en caso contrario devuelve false.
  • No confíes en los filtros de saneamiento para el escapado de salida crítico para la seguridad: escapa en el momento del renderizado.

Temas relacionados

Conclusión

filter_var() es una manera compacta y confiable de validar y sanear valores individuales en PHP. Recurre a los filtros de validación para aceptar o rechazar entradas, a los filtros de saneamiento para limpiarlas, y recuerda comparar los resultados de validación con === false. Combinada con filter_var_array() para datos masivos y htmlspecialchars() para la salida, forma la columna vertebral del manejo seguro de entradas.

Práctica

Práctica
¿Cuál es la función de filter_var() en PHP?
¿Cuál es la función de filter_var() en PHP?
Was this page helpful?