Saltar al contenido

Regex para validar el formato de fecha dd/mm/yyyy

Te sugerimos que pruebes esta resolución en un ambiente controlado antes de enviarlo a producción, saludos.

Solución:

La expresión regular que pegó no valida correctamente los años bisiestos, pero hay una que sí lo hace en la misma publicación. Lo modifiqué para tomar dd/mm/yyyy, dd-mm-yyyy o dd.mm.yyyy.

^(?:(?:31(/|-|.)(?:0?[13578]|1[02]))1|(?:(?:29|30)(/|-|.)(?:0?[13-9]|1[0-2])2))(?:(?:1[6-9]|[2-9]d)?d2)$|^(?:29(/|-|.)0?23(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1d|2[0-8])(/|-|.)(?:(?:0?[1-9])|(?:1[0-2]))4(?:(?:1[6-9]|[2-9]d)?d2)$

Lo probé un poco en el enlace que Arun proporcionó en su respuesta y también aquí y parece funcionar.

Editar 14 de febrero de 2019: eliminé una coma que estaba en la expresión regular que permitía fechas como 29-0,-11

He extendido la expresión regular proporcionada por @Ofir Luzon para los formatos dd-mmm-YYYY, dd/mmm/YYYY, dd.mmm.YYYY según mis requisitos. Cualquier otra persona con el mismo requisito puede referir esto

^(?:(?:31(/|-|.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))1|(?:(?:29|30)(/|-|.)(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))2))(?:(?:1[6-9]|[2-9]d)?d2)$|^(?:29(/|-|.)(?:0?2|(?:Feb))3(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1d|2[0-8])(/|-|.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))4(?:(?:1[6-9]|[2-9]d)?d2)$

y probado para algunos casos de prueba aquí http://regexr.com/39tr1.

Para una mejor comprensión de esta expresión regular, consulte esta imagen:
ingrese la descripción de la imagen aquí

Aviso:

Su expresión regular no funciona durante años que “son múltiplos de 4 y 100, pero no de 400”. Los años que pasan esa prueba no son años bisiestos. Por ejemplo: 1900, 2100, 2200, 2300, 2500, etc. En otras palabras, pone todos los años con el formato dd00 en la misma clase de años bisiestos, lo cual es incorrecto. – mucho que aprender

Por lo tanto, funciona correctamente solo para [1901 – 2099] (Uf)

dd/MM/aaaa:

Comprueba si es año bisiesto. Los años de 1900 a 9999 son válidos. Solo dd/MM/aaaa

(^(((0[1-9]|1[0-9]|2[0-8])[/](0[1-9]|1[012]))|((29|30|31)[/](0[13578]|1[02]))|((29|30)[/](0[4,6,9]|11)))[/](19|[2-9][0-9])dd$)|(^29[/]02[/](19|[2-9][0-9])(00|04|08|12|16|20|24|28|32|36|40|44|48|52|56|60|64|68|72|76|80|84|88|92|96)$)

Te mostramos las reseñas y valoraciones de los lectores

Si entiendes que ha sido de utilidad este post, nos gustaría que lo compartas con otros desarrolladores de esta manera nos ayudas a difundir este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *