Regex para data (MM/DD/AAAA)

Use /^(?:0[1-9]|1[0-2])\/(?:0[1-9]|[12]\d|3[01])\/\d{4}$/ para verificar se uma string inteira é uma data válida no formato (MM/DD/AAAA). Todos os exemplos abaixo foram testados contra o padrão, e você pode abri-los no Regex Tester com as amostras já carregadas.

Atualizado em

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

Como o padrão funciona

ParteSignificado
(?:0[1-9]|1[0-2])Mês de 01 a 12 primeiro (ordem dos EUA)
\/Uma barra (escapada para literais JavaScript)
(?:0[1-9]|[12]\d|3[01])Dia de 01 a 31
\d{4}$Ano de quatro dígitos no final

Exemplos de código

JavaScript

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

Python

import re

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

PHP

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

Observações e limitações

Para aceitar também meses e dias com um dígito, troque 0[1-9] por 0?[1-9] nos dois lugares. Os dias de cada mês não são verificados, então valide a própria data depois.

Perguntas frequentes

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