Regex para data (DD/MM/AAAA)

Use /^(?:0[1-9]|[12]\d|3[01])\/(?:0[1-9]|1[0-2])\/\d{4}$/ para verificar se uma string inteira é uma data válida (DD/MM/AAAA). Cada exemplo abaixo foi testado contra o padrão, e você pode abri-lo no Testador de Regex com os exemplos já carregados.

Atualizado em

/^(?:0[1-9]|[12]\d|3[01])\/(?:0[1-9]|1[0-2])\/\d{4}$/
Abrir no Testador de Regex
EntradaResultado
30/10/2026✓ Corresponde
01/12/2000✓ Corresponde
31/01/1999✓ Corresponde
10/30/2026✗ Não corresponde
1/5/2026✗ Não corresponde
30-10-2026✗ Não corresponde
32/01/2026✗ Não corresponde

Como o padrão funciona

ParteSignificado
(?:0[1-9]|[12]\d|3[01])Dia 01–31 primeiro (ordem do Reino Unido, europeia, indiana e australiana)
\/Uma barra
(?:0[1-9]|1[0-2])Mês 01–12
\d{4}$Ano com quatro dígitos

Exemplos de código

JavaScript

const re = /^(?:0[1-9]|[12]\d|3[01])\/(?:0[1-9]|1[0-2])\/\d{4}$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?:0[1-9]|[12]\d|3[01])/(?:0[1-9]|1[0-2])/\d{4}', value))

PHP

preg_match('/^(?:0[1-9]|[12]\d|3[01])\/(?:0[1-9]|1[0-2])\/\d{4}$/', $value) === 1;

Observações e limitações

Troque \/ por [\/.-] para aceitar também 30.10.2026 e 30-10-2026. Os dias por mês não são verificados.

Perguntas frequentes

Qual é o regex para data (DD/MM/AAAA)?
/^(?:0[1-9]|[12]\d|3[01])\/(?:0[1-9]|1[0-2])\/\d{4}$/ — ele corresponde à string inteira. Veja a tabela acima para entender o que cada parte faz.
Quais exemplos correspondem?
Entre os exemplos testados, estes correspondem: 30/10/2026, 01/12/2000, 31/01/1999. Os outros não.
Como testo esse regex?
Clique em “Abrir no Testador de Regex” — o padrão, as flags e o texto de exemplo carregam automaticamente, e as correspondências são destacadas enquanto você edita.