Ao trabalhar com filtros de período no PHP, é comum receber valores como 10/02/2026 – 15/02/2026. O erro acontece quando validamos apenas a presença do hífen e acabamos aceitando strings como Guarda-roupa.
O Problema
Muitos desenvolvedores utilizam:
if (strpos($valor, ' - ') !== false) {
// trata como intervalo
}
Isso é incorreto. Qualquer string com hífen pode passar na validação:
- 10/02/2026 – 15/02/2026 ✔
- Matriculado – dispensa ✔ (erro)
- Guarda-roupa ✔ (erro)
O sistema passa a tratar texto comum como intervalo de data.
A Solução
Valide o formato exato do intervalo usando regex e valide as datas com DateTime.
function isIntervaloData(string $valor): bool
{
// Valida formato: 00/00/0000 - 00/00/0000
if (!preg_match('/^\d{2}\/\d{2}\/\d{4}\s-\s\d{2}\/\d{2}\/\d{4}$/', $valor)) {
return false;
}
[$dataInicio, $dataFim] = explode(' - ', $valor);
$d1 = DateTime::createFromFormat('d/m/Y', $dataInicio);
$d2 = DateTime::createFromFormat('d/m/Y', $dataFim);
return $d1 !== false && $d2 !== false;
}
Agora o comportamento será:
- 10/02/2026 – 15/02/2026 → true
- Guarda-roupa → false
- Matriculado – dispensa → false
Conclusão
Não valide intervalo de datas apenas verificando a existência de hífen.
Valide o formato completo da string e confirme se as datas são reais.
Isso evita falsos positivos em filtros SQL e relatórios.
Tags: php, validação de data, regex php, filtro between, DateTime, backend, desenvolvimento web