Regex para fecha (AAAA-MM-DD)

Usa /^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/ para comprobar que una cadena completa es una fecha válida (AAAA-MM-DD). Cada ejemplo de abajo está probado contra el patrón, y puedes abrirlo en el probador de regex con las muestras ya cargadas.

Actualizado el

/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/
Abrir en el probador de regex
EntradaResultado
2026-10-30✓ Coincide
1999-01-01✓ Coincide
2024-02-29✓ Coincide
2026-13-01✗ No coincide
2026-1-5✗ No coincide
2026/10/30✗ No coincide
26-10-30✗ No coincide
2026-00-10✗ No coincide

Cómo funciona el patrón

ParteSignificado
^\d{4}Año de cuatro dígitos
(?:0[1-9]|1[0-2])Mes 01–12
(?:0[1-9]|[12]\d|3[01])Día 01–31
-Guiones literales entre las partes

Ejemplos de código

JavaScript

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

Python

import re

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

PHP

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

Notas y limitaciones

Una regex puede comprobar el formato, pero no el calendario: 2026-02-30 pasa la validación. Tras la coincidencia, confírmalo con una librería de fechas o new Date(value) y compara las partes. Este es el formato ISO 8601 que usa <input type="date">.

Preguntas frecuentes

¿Cuál es la regex para fecha (AAAA-MM-DD)?
/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/ — coincide con la cadena completa. Consulta la tabla de arriba para ver qué hace cada parte.
¿Qué ejemplos coinciden?
De los ejemplos probados, estos coinciden: 2026-10-30, 1999-01-01, 2024-02-29. Los demás no.
¿Cómo pruebo esta regex?
Haz clic en «Abrir en el probador de regex»: el patrón, los flags y el texto de ejemplo se cargan automáticamente, y las coincidencias se resaltan mientras editas.