Como validar intervalo de datas no PHP sem confundir strings com hífen

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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima