Ver Mensaje Individual
  #4 (permalink)  
Antiguo 21/07/2005, 18:25
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 2 meses
Puntos: 45
He arreglado un poco la funcion, que me parecia un poco chapucera. Tambien he incluido la funcion anyoBisiesto, que falta. Y la expresion regular.. me sonaba a inventada, asi que he puesto una correcta.

Tambien he añadido un return false siempre que la validacion sea fallida, ya que se devolvia el true pero no el false. He quitado alguna que otra validacion inutil (como la primera de saber si esta vacio, ya se comprueba con la expresion regular) y creo que nada mas.

Funciona en IE, Firefox y Opera, los he probado yo:

Código PHP:
<script>

function 
anyoBisiesto(anyo){ 
    
//si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925 
    
if (anyo 100
        var 
fin=anyo+1900
    else 
        var 
fin=anyo
    
/* 
    * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto 
    * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto 
    */ 
    
if (fin != 0
        return 
false
    else { 
        if (
fin 100 == 0){ 
            
//si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto  
            
if (fin 400 == 0)
                return 
true
            
//si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto  
            
else
                return 
false
        } 
        
//si es divisible por 4 y no es divisible por 100 > el año es bisiesto 
        
else 
            return 
true
    }
}


function 
validarFechacampo ){ 
   
/* Comprobar que el formato  es dd/mm/aaaa, aunque si el formato de 
      fecha que utilizas es otro, puedes cambiar esta parte de comprobación 
   */ 
   
campo.value campo.value.replace(/./g'/'); 
   
campo.value campo.value.replace(/-/g'/'); 
   var 
fechaexp = new RegExp('^[0-9]{2}/[0-9]{2}/[0-9]{4}$');     
   if (!
fechaexp.test(campo.value)){ 
      
alert("La fecha de tener el formato dd/mm/aaaa"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
    
/* Obtener la fecha introducida y se separa en dia, mes y año */ 
   
campo.value
   
dia=a.split("/")[0];
   
mes=a.split("/")[1];
   
anyo=a.split("/")[2];
   if(
anyoBisiesto(anyo)) 
      
febrero=29
   else 
      
febrero=28
   
/* si el mes introducido es negativo, 0 o mayor que 12, se avisa y se para 
      la ejecución */ 
   
if ((mes<1) || (mes>12)){ 
      
alert("El mes introducido no es valido. Por favor, introduzca un mes correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   }
   
/* si el mes introducido es febrero y el dia es mayor que el 
      correspondiente al año introducido se avisa y se para la ejecucion */ 
   
if ((mes==2) && ((dia<1) || (dia>febrero))){ 
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* si el mes introducido es de 31 dias y el dia introducido es mayor de 
      31 se avisa y se para la ejecucion 
   */ 
   
if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31))){ 
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* si el mes introducido es de 30 dias y el dia introducido es mayor de 
      30 se avisa y se para la ejecucion 
   */ 
   
if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30))){ 
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* si el mes año introducido es menor que 1900 o mayor que 2100 se 
      avisa y se para la ejecución 
      NOTA: estos valores son una elección, en realidad no son años 
      erróneos, solo sirve para validar un intervalo de años en caso de ser 
      necesario */        
   
if ((anyo<1900) || (anyo>2100)){ 
      
alert("El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2100"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* Si ha superado todas las condiciones anteriores es que la fecha 
      introducida es correcta */ 
   
return true;
}
</script>

<input type="text" onchange="alert( validarFecha(this) )" size="52"> 
saludos, a ver si ahora funciona todo bien...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.