Ícone do site Linha de Comando

Como validar intervalo de datas com hífen no PHP (sem confundir com palavras compostas)

Como validar intervalo de datas com hífen no PHP (sem confundir com palavras compostas)

Em muitos sistemas usamos campos de filtro que permitem selecionar um intervalo de datas,
normalmente no formato:

10/02/2026 - 15/02/2026

O problema acontece quando usamos apenas uma verificação simples como:

strpos($valor, ' - ') !== false

Isso pode gerar falsos positivos, por exemplo:

Guarda-roupa

Ou até:

Matriculado - dispensa

Ou seja, apenas verificar se existe hífen não é suficiente.


✔ A solução correta: validar o formato da data

O ideal é verificar se a string está exatamente no formato:

dd/mm/yyyy - dd/mm/yyyy

Para isso, usamos expressão regular (regex).

Função recomendada


function isIntervaloData(string $valor): bool
{
    // Verifica o formato exato: 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;
    }

    // Divide as datas
    [$dataInicio, $dataFim] = explode(' - ', $valor);

    // Valida se são datas reais
    $d1 = DateTime::createFromFormat('d/m/Y', $dataInicio);
    $d2 = DateTime::createFromFormat('d/m/Y', $dataFim);

    return $d1 !== false && $d2 !== false;
}

Como funciona a regex?


^                       → início da string
\d{2}\/\d{2}\/\d{4}     → data no formato 00/00/0000
\s-\s                   → espaço + hífen + espaço
\d{2}\/\d{2}\/\d{4}     → segunda data
$                       → fim da string

Testando na prática

Exemplo 1 — Intervalo válido


10/02/2026 - 15/02/2026

Resultado: ✔ true

Exemplo 2 — Palavra com hífen


Guarda-roupa

Resultado: ❌ false

Exemplo 3 — Texto com hífen separado


Matriculado - dispensa

Resultado: ❌ false


Por que não usar apenas strpos?

Porque strpos() apenas verifica se existe o caractere ou sequência na string.
Ele não garante:

Regex + DateTime::createFromFormat() torna sua validação:


Conclusão

Se você precisa detectar intervalos de data no PHP, nunca valide apenas pelo hífen.
Sempre valide o formato completo da string.

Essa pequena melhoria evita bugs silenciosos em filtros e relatórios.

Simples, direto e profissional.

Sair da versão mobile