Validação de dados em PHP: de verificações simples a soluções profissionais
A validação de dados é um dos pilares fundamentais de uma aplicação web segura e estável. O PHP oferece diversas ferramentas integradas que permitem verificar eficientemente a entrada do usuário. Neste artigo, abordaremos as principais abordagens, desde funções simples até bibliotecas poderosas, e mostraremos exemplos práticos.
Por que a validação é necessária?
Qualquer aplicação que receba dados do usuário (formulários, APIs, parâmetros de URL) deve verificar sua correção. Isso ajuda a:
- Prevenir injeções SQL e ataques XSS
- Garantir a integridade dos dados no banco
- Melhorar a experiência do usuário (erros compreensíveis)
- Evitar erros lógicos no funcionamento da aplicação
Funções de validação integradas do PHP
O PHP fornece várias funções simples, mas eficazes, para verificação básica de dados:
1. Verificação de vazio: empty() e isset()
// Verificar se o campo não está vazio$name = trim($_POST['name'] ?? '');if (empty($name)) { echo "O nome é obrigatório";}
// Verificar existência da variávelif (!isset($_POST['email'])) { echo "O campo email não foi enviado";}2. Filtros: filter_var()
Este é, talvez, o mecanismo integrado mais conveniente para validar tipos de dados comuns:
$email = "user@example.com";if (filter_var($email, FILTER_VALIDATE_EMAIL)) { echo "Email válido";} else { echo "Formato de email inválido";}
// Outros filtros úteis:$url = "https://pythonlib.ru";if (filter_var($url, FILTER_VALIDATE_URL)) { echo "URL válida";}
$ip = "192.168.1.1";if (filter_var($ip, FILTER_VALIDATE_IP)) { echo "Endereço IP válido";}
// Filtro para números inteiros$age = 25;if (filter_var($age, FILTER_VALIDATE_INT, ["options" => ["min_range" => 1, "max_range" => 120]])) { echo "Idade válida";}Expressões regulares para validação complexa
Quando os filtros padrão não são suficientes, as expressões regulares vêm em socorro. A função preg_match() permite verificar dados de acordo com qualquer padrão:
// Verificação de telefone (formato russo)$phone = "+7 (999) 123-45-67";$pattern = '/^\\+7\\s?\\(\\d{3}\\)\\s?\\d{3}-\\d{2}-\\d{2}$/';if (preg_match($pattern, $phone)) { echo "Telefone válido";} else { echo "Formato de telefone inválido";}
// Verificação de senha (mínimo 8 caracteres, pelo menos um dígito e uma letra)$password = "MyPass123";$pattern = '/^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$/';if (preg_match($pattern, $password)) { echo "Senha segura";} else { echo "Senha não atende aos requisitos";}Bibliotecas de validação: quando o projeto se torna mais complexo
Para projetos grandes (frameworks, CMS), a validação manual torna-se inconveniente. Bibliotecas especializadas vêm em auxílio. Vamos considerar as duas mais populares:
1. Symfony Validator
Parte do ecossistema Symfony, mas pode ser usado separadamente. Permite descrever regras de validação através de anotações ou YAML/XML:
use Symfony\\Component\\Validator\\Validation;use Symfony\\Component\\Validator\\Constraints as Assert;
class User { /** * @Assert\\NotBlank(message="O nome não pode estar vazio") * @Assert\\Length(min=2, max=50) */ public $name; /** * @Assert\\Email(message="Formato de email inválido") */ public $email;}
// Uso$validator = Validation::createValidatorBuilder() ->enableAnnotationMapping() ->getValidator();
$user = new User();$user->name = "A";$user->email = "invalid-email";
$errors = $validator->validate($user);if (count($errors) > 0) { foreach ($errors as $error) { echo $error->getMessage() . "<br>"; }}
Também na biblioteca
chrono para Rust: guia completo com exemplos práticos
Configuração de aplicações C# (.NET): bibliotecas e abordagens
Trabalho com imagens: redimensionamento (resize) e corte (crop) em C++ com OpenCV
Awilix para TypeScript: guia completo com exemplos
Autorização e Autenticação em Java: Spring Security e JWT
Recommendations