W3docs

filter_var()

O PHP oferece funções integradas para filtrar e validar dados de entrada. Saiba como usar filter_var() para validar e sanitizar valores.

Introdução

filter_var() é a ferramenta integrada do PHP para validar e sanitizar um único valor. Validar significa verificar se um valor corresponde ao formato esperado (um e-mail real, um inteiro dentro de um intervalo, uma URL válida) e retornar o valor caso corresponda, ou false caso não corresponda. Sanitizar significa limpar um valor removendo ou escapando caracteres que não pertencem a ele.

Nunca confie em dados que vêm de fora do seu script — campos de formulário, query strings, cookies, payloads de API. Processá-los com filter_var() antes de armazenar, exibir ou agir sobre eles é uma das maneiras mais simples de manter sua aplicação segura e previsível. Esta página aborda a sintaxe, os dois modos (validar vs. sanitizar), os filtros e flags mais comuns, e as armadilhas que costumam pegar as pessoas de surpresa.

Sintaxe

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
ParâmetroObrigatórioDescrição
$valuesimO valor a ser filtrado.
$filternãoO ID do filtro a ser aplicado, ex.: FILTER_VALIDATE_INT. O padrão é FILTER_DEFAULT, que não realiza nenhuma filtragem.
$optionsnãoUm array associativo de opções/flags, ou uma constante de flag única, para ajustar o filtro.

Valor de retorno: o valor filtrado (e possivelmente convertido) em caso de sucesso, ou false em caso de falha. Observe que um filtro de validação retorna o próprio valor — portanto, sempre compare com === quando o valor válido puder ser falsy (como 0 ou uma string vazia).

Validando dados

A validação responde a uma pergunta de sim/não: esse valor é aceitável? O filtro retorna o valor em caso de sucesso e false em caso de falha.

Validar um endereço de e-mail

php— editable, runs on the server

Os filtros de validação mais úteis são:

FiltroValida
FILTER_VALIDATE_INTUm inteiro (opcionalmente dentro de min_range/max_range).
FILTER_VALIDATE_FLOATUm número de ponto flutuante.
FILTER_VALIDATE_BOOLEAN"1", "true", "on", "yes"true; "0", "false", "off", "no", ""false.
FILTER_VALIDATE_EMAILUm endereço de e-mail.
FILTER_VALIDATE_URLUma URL.
FILTER_VALIDATE_IPUm endereço IPv4/IPv6.
FILTER_VALIDATE_REGEXPUm valor que corresponde a um padrão PCRE.

A armadilha do === false

Como um filtro de validação retorna o valor, um resultado de 0 ou "0" é válido, mas falsy. Sempre use uma comparação estrita:

php— editable, runs on the server

Sanitizando dados

A sanitização não rejeita um valor — ela o limpa e retorna a string limpa.

Sanitizar um endereço de e-mail

php— editable, runs on the server

Filtros de sanitização comuns:

FiltroEfeito
FILTER_SANITIZE_EMAILRemove caracteres ilegais em um e-mail.
FILTER_SANITIZE_URLRemove caracteres ilegais em uma URL.
FILTER_SANITIZE_NUMBER_INTMantém dígitos e +/-.
FILTER_SANITIZE_NUMBER_FLOATMantém dígitos, +/- e (com flags) .,e.
FILTER_SANITIZE_SPECIAL_CHARSCodifica em HTML os caracteres <, >, &, " e outros.
FILTER_SANITIZE_FULL_SPECIAL_CHARSComo htmlspecialchars() com ENT_QUOTES.

Nota: FILTER_SANITIZE_STRING foi descontinuado no PHP 8.1. Para limpar strings na saída HTML, prefira htmlspecialchars() no momento da exibição.

Usando opções e flags

O terceiro argumento ajusta um filtro. Passe-o como um array com 'options' (e opcionalmente 'flags'):

php— editable, runs on the server

Flags também podem ser passadas diretamente como terceiro argumento quando você não precisa da forma de array:

php— editable, runs on the server

Validar vs. sanitizar — quando usar cada um

  • Validar quando você precisa de uma decisão de sim/não: rejeitar a requisição, mostrar um erro, tentar novamente. Use filtros de validação para e-mails, números, URLs e IPs em formulários e APIs.
  • Sanitizar quando você precisa aceitar a entrada, mas quer que ela seja limpa de caracteres perigosos ou indevidos antes do uso.
  • Os dois são complementares — um padrão comum é validar na entrada e escapar (ex.: com htmlspecialchars()) na saída, em vez de depender apenas de filtros de sanitização.

Armadilhas comuns

  • Um filtro de validação retorna o valor, não true. Compare com === false para detectar falha.
  • filter_var() funciona em um único valor escalar. Para filtrar muitos valores de uma vez, use filter_var_array() ou, para dados de requisição, filter_input_array().
  • FILTER_VALIDATE_BOOLEAN retorna null (não false) para valores não reconhecidos somente quando você passa FILTER_NULL_ON_FAILURE; caso contrário, retorna false.
  • Não dependa de filtros de sanitização para escapar saídas críticas de segurança — escape no momento da renderização.

Tópicos relacionados

Conclusão

filter_var() é uma maneira compacta e confiável de validar e sanitizar valores individuais em PHP. Use os filtros de validação para aceitar ou rejeitar entradas, os filtros de sanitização para limpá-las, e lembre-se de comparar os resultados de validação com === false. Combinado com filter_var_array() para dados em massa e htmlspecialchars() para saída, ele forma a base do tratamento seguro de entradas.

Prática

Prática
Qual é a função do filter_var() no PHP?
Qual é a função do filter_var() no PHP?
Was this page helpful?