[RETOS] Expresiones Regulares

Iniciado por criskapunk, 23 Agosto 2011, 22:57 PM

0 Miembros y 1 Visitante están viendo este tema.

criskapunk

#20
Como no publicaron nada todavía, para que no muera el hilo les dejo otro reto.


Validar fechas con el siguiente formato: dd/mm/aaaa.

(La cadena 1/2/2000 no sería válida. Tendría que ser 01/02/2000, por ejemplo).
- Comprobar si la cantidad de días es correcta para el mes en cuestión. Por ejemplo, no sería correcta 30/02/2000. Para Febrero tomamos como valor de 28 días, sin considerar años bisiestos (No se si esto se podrá hacer con RegExp xD).
- El intervalo de años debe estar entre 1900 y 2050.

Edito:
Ya la terminé. Es ILEGIBLE :P

Un saludo.

raul338

#21

^(?>3[01]|0[1-9]|[12]\d)/(?>(?<=(?>0[1-9]|[12]\d)/)(?>0[1-9]|1[012])|(?<=31/)(?>0[13578]|1[02])|(?<=30/)(?>0[13-9]|1[012]))/(?>19\d\d|20[0-4]\d|2050)$


Pruebenlo :P me costo un poco

PD: No se sabe si el año es bisiesto o no :xD y creo que eso no se puede saber

Shell Root

#22
No se porque no funciona con 30/12/2011, esta correcta la fecha no?, y falta validar 00/12/2011, 00/00/2011, 01/13/2011
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

criskapunk

#23
Raul, tu expresión toma como válidos los años del 2051 al 2059. Era hasta el 2050 inclusive.

Edito:
@Shell Root: Las fechas 00/12/2011 y 00/00/2011 no se tienen que validar, no existen los días o meses cero.

Un saludo y gracias por participar :P

Shell Root

¬¬ Crees que soy estupido o que? Obviamente no, pero la ExpReg la filtra como si fuera una fecha correcta.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

criskapunk

No era para que te lo tomes a mal. Entendí mal tu mensaje. Disculpas.

Un saludo.

Valkyr

Perdón por no haber posteado ningún reto pero me ha sido imposible conectarme apenas más de cinco minutos.

Yo he sacado esta expresión, es un poco engorrosa pero creo que puede valer:

^((0[1-9]|[12]\d)/(0[13-9]|1[0-2])|28/02|3(0/(04|06|09|11)|1/(01|03|05|07|08|10|12)))/(19\d\d|20([0-4]\d|50))$

Supongo que quizás podría simplificarse pero no es cuestión de matarme mirando la expresión a estas horas.

Saludos.

raul338

#27
Ya arregle la mía  ;D

@Valkyr link: Tu Expresion regular no me toma como valida estas fechas


30/07/2000
01/02/2000


Edit, estas fechas deberian ser validas


31/07/2000
30/07/2000
01/02/2000
25/05/2002
15/07/2000
28/02/2001
31/05/2001
30/12/2011
29/02/2001


y estas no

01/00/2011
31/04/2001
00/12/2011
00/00/2011
01/13/2011
30/02/2001
25/05/2051

Shell Root

Emmm no @raul338,

Intentad con 01/00/2011
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

raul338