Foros del Web » Programando para Internet » Javascript »

validacion de expresión regular que me trae de cabeza

Estas en el tema de validacion de expresión regular que me trae de cabeza en el foro de Javascript en Foros del Web. Hola amig@s. Estoy intentado validar, entre otras cosas, un formato de fecha del tipo "dd/mm/aaaa". He comprobado que mi expresión regular valida correctamente en Código ...
  #1 (permalink)  
Antiguo 26/03/2010, 05:39
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
validacion de expresión regular que me trae de cabeza

Hola amig@s.

Estoy intentado validar, entre otras cosas, un formato de fecha del tipo "dd/mm/aaaa".
He comprobado que mi expresión regular valida correctamente en
Código HTML:
http://regexpal.com/
Pero llevo media mañana recorriendo post relacionados en este foro y en otros intentando buscar todas las maneras de comparar la fecha que paso con esa expresión y no me funciona ninguna!!.
Os pongo el código que tengo ahora mismo
Código Javascript:
Ver original
  1. function validaFecha(valor)
  2. {      
  3.     patron=/^\d{2}\/\d{2}\/\d{4}$/;
  4.     if(valor.value != '' && valor.value != undefined)
  5.     {
  6.         if(patron.test(valor.value))
  7.                      alert('formato correcto')
  8.                  else
  9.                      alert('formato incorrecto')
  10.          }
  11. }

He probado(en negativo y en positivo) con
Código Javascript:
Ver original
  1. if(patron.test(valor.value))
  2. if(valor.value.test(patron))
  3. if(patron.match(valor.value))
  4. if(valor.value.match(patron))
  5. .
  6. .
  7. .
Incluso he convertido patron a una variable RegExp y nada de nada, meta el valor que meta en el input siempre me sale el alert de FORMATO INCORRECTO.

Como dicen, 4 ojos ven más que 2, a ver si alguien ve dónde demonios se esconde el faio en esta ocasión.

Muchas gracias!!
  #2 (permalink)  
Antiguo 26/03/2010, 06:49
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: validacion de expresión regular que me trae de cabeza

Hola

Prueba así

Código Javascript:
Ver original
  1. function validar (formulario) {
  2. var expreg = new RegExp ("^([0][1-9]|[12][0-9]|3[01])(/|-)(0[1-9]|1[012])\2(\d{4})$"),
  3. cadena=formulario.cadena.value;
  4.  
  5.      if (cadena == "" && cadena == undefined) {
  6.             window.alert("Introduce una cadena");
  7.     return false;
  8.     }
  9.  
  10. formulario.cadena.focus();
  11.  
  12.     if (expreg.test(cadena) ) {
  13.             window.alert("Aceptar: " + cadena + "\n\n" +
  14.             (RegExp.$1==""?"":"RegExp.$1="+RegExp.$1+"\n") +
  15.             (RegExp.$2==""?"":"RegExp.$2="+RegExp.$2+"\n") +
  16.             (RegExp.$3==""?"":"RegExp.$3="+RegExp.$3+"\n") +
  17.             (RegExp.$4==""?"":"RegExp.$4="+RegExp.$4+"\n") +
  18.             (RegExp.$5==""?"":"RegExp.$5="+RegExp.$5+"\n") +
  19.             (RegExp.$6==""?"":"RegExp.$6="+RegExp.$6+"\n") +
  20.             (RegExp.$7==""?"":"RegExp.$7="+RegExp.$7+"\n") +
  21.             (RegExp.$8==""?"":"RegExp.$8="+RegExp.$8+"\n") +
  22.             (RegExp.$9==""?"":"RegExp.$9="+RegExp.$9));
  23.         return false;
  24.     }
  25.  
  26. window.alert("¡ Error !\n\nRechazar: " + cadena);
  27. formulario.cadena.select();
  28. return false;
  29. }

Cita:
<form onsubmit="return validar(this);" action="" method="post">
<input type="text" id="cadena" />
<input type="submit" value="Verificar cadena de entrada" />
</form>
Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #3 (permalink)  
Antiguo 28/04/2010, 11:13
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: validacion de expresión regular que me trae de cabeza

Hola Adler.

Lo primero gracias por tu respuesta. Lo probé tal me la escribiste, haciendo los cambios oprtunos para validar sólo la fecha en un evento onBlur, que es como lo tengo. Pero no funcionó.
Cambiando y cambiando llegué a esta otra reducción del código que me pusiste
Código Javascript:
Ver original
  1. function validaFecha()
  2.     {
  3.         var expreg = new RegExp ("^([0][1-9]|[12][0-9]|3[01])(/|-)(0[1-9]|1[012])\2(\d{4})$");
  4.         cadena=document.formPersonales.nacimiento.value;
  5.         if (cadena == "" || cadena == undefined)
  6.         {
  7.             window.alert("Introduce una cadena");
  8.             cadena.focus();
  9.                 return false;
  10.         }
  11.        
  12.         if (expreg.test(cadena) )
  13.         {
  14.             window.alert("Aceptar: " + cadena);
  15.             return true;
  16.         }
  17.         else
  18.         {
  19.             window.alert("¡ Error !\n\nRechazar: " + cadena);
  20.             cadena.select();
  21.             return false;
  22.         }
  23.        
  24.     };

Pero tampoco va, siempre me ieva al error. seguiré probando. Muchas gracias!!
  #4 (permalink)  
Antiguo 29/04/2010, 06:31
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 4 meses
Puntos: 126
Respuesta: validacion de expresión regular que me trae de cabeza

Hola

Prueba ahora

Código Javascript:
Ver original
  1. function validaFecha() {
  2. var expreg = /^([0][1-9]|[12][0-9]|3[01])(\/|-)([0][1-9]|[1][0-2])\2(\d{4})$/;
  3.         cadena=document.formPersonales.nacimiento.value;
  4.         if (cadena == "" || cadena == undefined)  {
  5.             alert("Introduce una cadena");
  6.         }
  7.        
  8.         if (expreg.test(cadena) )  {
  9.             alert("Aceptar: " + cadena);
  10.         } else{
  11.             alert("¡ Error !\n\nRechazar: " + cadena);
  12.         }
  13.        
  14.     }

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #5 (permalink)  
Antiguo 30/04/2010, 01:26
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: validacion de expresión regular que me trae de cabeza

Lo volveré a probar, pero mientras tanto pongo el código que logró validármela correctamente
Código Javascript:
Ver original
  1. function validaFecha(tipo, label)
  2.     {
  3.         valor = document.getElementById(tipo).value;
  4.         if(valor != '' && valor != undefined)
  5.         {
  6.             var fecha = valor.split('/');
  7.             if(fecha[1] == undefined || fecha[2] == undefined)
  8.             {
  9.                 document.getElementById(tipo).value = "";
  10.                 document.getElementById(label).style.color='red';
  11.                 return (false);
  12.             }
  13.             else
  14.             {
  15.                 if(fecha[1]>12)
  16.                 {
  17.                     document.getElementById(tipo).value = "";
  18.                     document.getElementById(label).style.color='red';
  19.                     return (false);
  20.                 }
  21.                 else
  22.                 {
  23.                     var fechaactual = new Date();
  24.                     var anio=fechaactual.getFullYear();
  25.                     if(tipo == 'nacimiento' && fecha[2]>(anio-16))
  26.                     {
  27.                         document.getElementById(tipo).value = "";
  28.                         document.getElementById(label).style.color='red';
  29.                         return (false);
  30.                     }
  31.                     else if(tipo == 'finmayor' && fecha[2]<anio)
  32.                     {
  33.                         document.getElementById(tipo).value = "";
  34.                         document.getElementById(label).style.color='red';
  35.                         return (false);
  36.                     }
  37.                     else
  38.                     {
  39.                         switch(fecha[1])
  40.                         {
  41.                            
  42.                             case 01:
  43.                                 if(fecha[0]>31)
  44.                                 {
  45.                                     document.getElementById(tipo).value = "";
  46.                                     document.getElementById(label).style.color='red';
  47.                                     return (false);
  48.                                 }
  49.                                 else
  50.                                 {
  51.                                     document.getElementById(label).style.color='#646464';
  52.                                 }
  53.                             break;
  54.                             case 02:
  55.                                 if(fecha[0]>29)
  56.                                 {
  57.                                     document.getElementById(tipo).value = "";
  58.                                     document.getElementById(label).style.color='red';
  59.                                     return (false);
  60.                                 }
  61.                                 else
  62.                                 {
  63.                                     document.getElementById(label).style.color='#646464';
  64.                                 }
  65.                             break;
  66.                             case 03:
  67.                                 if(fecha[0]>31)
  68.                                 {
  69.                                     document.getElementById(tipo).value = "";
  70.                                     document.getElementById(label).style.color='red';
  71.                                     return (false);
  72.                                 }
  73.                                 else
  74.                                 {
  75.                                     document.getElementById(tipo).style.color='#646464';
  76.                                 }
  77.                             break;
  78.                             case 04:
  79.                                 if(fecha[0]>30)
  80.                                 {
  81.                                     document.getElementById(tipo).value = "";
  82.                                     document.getElementById(label).style.color='red';
  83.                                     return (false);
  84.                                 }
  85.                                 else
  86.                                 {
  87.                                     document.getElementById(label).style.color='#646464';
  88.                                 }
  89.                             break;
  90.                             case 05:
  91.                                 if(fecha[0]>31)
  92.                                 {
  93.                                     document.getElementById(tipo).value = "";
  94.                                     document.getElementById(label).style.color='red';
  95.                                     return (false);
  96.                                 }
  97.                                 else
  98.                                 {
  99.                                     document.getElementById(label).style.color='#646464';
  100.                                 }
  101.                             break;
  102.                             case 06:
  103.                                 if(fecha[0]>30)
  104.                                 {
  105.                                     document.getElementById(tipo).value = "";
  106.                                     document.getElementById(label).style.color='red';
  107.                                     return (false);
  108.                                 }
  109.                                 else
  110.                                 {
  111.                                     document.getElementById(label).style.color='#646464';
  112.                                 }
  113.                             break;
  114.                             case 07:
  115.                                 if(fecha[0]>31)
  116.                                 {
  117.                                     document.getElementById(tipo).value = "";
  118.                                     document.getElementById(label).style.color='red';
  119.                                     return (false);
  120.                                 }
  121.                                 else
  122.                                 {
  123.                                     document.getElementById(label).style.color='#646464';
  124.                                 }
  125.                             break;
  126.                             case 08:
  127.                                 if(fecha[0]>31)
  128.                                 {
  129.                                     document.getElementById(tipo).value = "";
  130.                                     document.getElementById(label).style.color='red';
  131.                                     return (false);
  132.                                 }
  133.                                 else
  134.                                 {
  135.                                     document.getElementById(label).style.color='#646464';
  136.                                 }
  137.                             break;
  138.                             case 09:
  139.                                 if(fecha[0]>30)
  140.                                 {
  141.                                     document.getElementById(tipo).value = "";
  142.                                     document.getElementById(label).style.color='red';
  143.                                     return (false);
  144.                                 }
  145.                                 else
  146.                                 {
  147.                                     document.getElementById(label).style.color='#646464';
  148.                                 }
  149.                             break;
  150.                             case 10:
  151.                                 if(fecha[0]>31)
  152.                                 {
  153.                                     document.getElementById(tipo).value = "";
  154.                                     document.getElementById(label).style.color='red';
  155.                                     return (false);
  156.                                 }
  157.                                 else
  158.                                 {
  159.                                     document.getElementById(label).style.color='#646464';
  160.                                 }
  161.                             break;
  162.                             case 11:
  163.                                 if(fecha[0]>30)
  164.                                 {
  165.                                     document.getElementById(tipo).value = "";
  166.                                     document.getElementById(label).style.color='red';
  167.                                     return (false);
  168.                                 }
  169.                                 else
  170.                                 {
  171.                                     document.getElementById(label).style.color='#646464';
  172.                                 }
  173.                             break;
  174.                             case 12:
  175.                                 if(fecha[0]>31)
  176.                                 {
  177.                                     document.getElementById(tipo).value = "";
  178.                                     document.getElementById(label).style.color='red';
  179.                                     return (false);
  180.                                 }
  181.                                 else
  182.                                 {
  183.                                     document.getElementById(label).style.color='#646464';
  184.                                 }
  185.                             break;
  186.                        
  187.                         }
  188.                     }
  189.                 }
  190.             }
  191.         }
  192.     };

Ya sé que es muy larga, pero valida día y mes, dependiendo del mes, y año dependiendo de para qué cometido queremos validar la fecha.

Un saludo y gracias de nuevo!!

Etiquetas: regular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:50.