Foros del Web » Programando para Internet » Javascript »

Validar fecha aaaa/mm/dd

Estas en el tema de Validar fecha aaaa/mm/dd en el foro de Javascript en Foros del Web. ... Hola compañeros de la web ... tengo el siguiente codigo de validacion de fecha aaaa/mm/dd. Pero algo le esta pasando ... ya que no ...
  #1 (permalink)  
Antiguo 02/01/2007, 07:04
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 5 meses
Puntos: 1
Pregunta Validar fecha aaaa/mm/dd

... Hola compañeros de la web ... tengo el siguiente codigo de validacion de fecha aaaa/mm/dd. Pero algo le esta pasando ... ya que no esta realizando lo que se necesita .... Gracias por la ayuda que me puedan brindar.

Código PHP:
<html
<
head
  <
script language="JavaScript"
   
//¿Como puedo validar una o mas fechas escritas en elementos TEXT?

   
function esDigito(sChr){ 
    var 
sCod sChr.charCodeAt(0); 
    return ((
sCod 47) && (sCod 58)); 
   } 

   function 
valSep(oTxt){ 
    var 
bOk false
    var 
sep1 oTxt.value.charAt(4); 
    var 
sep2 oTxt.value.charAt(7); 
    
bOk bOk || ((sep1 == "-") && (sep2 == "-")); 
    
bOk bOk || ((sep1 == "/") && (sep2 == "/")); 
    return 
bOk
   } 

   function 
finMes(oTxt){ 
    var 
nMes parseInt(oTxt.value.substr(52), 10); 
    var 
nAno parseInt(oTxt.value.substr(04), 10); 
    var 
nRes 0
    switch (
nMes){ 
     case 
1nRes 31; break; 
     case 
2nRes 28; break; 
     case 
3nRes 31; break; 
     case 
4nRes 30; break; 
     case 
5nRes 31; break; 
     case 
6nRes 30; break; 
     case 
7nRes 31; break; 
     case 
8nRes 31; break; 
     case 
9nRes 30; break; 
     case 
10nRes 31; break; 
     case 
11nRes 30; break; 
     case 
12nRes 31; break; 
    } 
    return 
nRes + (((nMes == 2) && (nAno 4) == 0)? 10); 
   } 

    function 
valAno(oTxt){ 
    var 
bOk true
    var 
nAno parseInt(oTxt.value.substr(0)); 
    
bOk bOk && ((nAno.length == 2) || (nAno.length == 4)); 
    if (
bOk){ 
     for (var 
0nAno.lengthi++){ 
      
bOk bOk && esDigito(nAno.charAt(i)); 
     } 
    } 
    return 
bOk
   } 
   
   function 
valMes(oTxt){ 
    var 
bOk false
    var 
nMes parseInt(oTxt.value.substr(52), 10); 
    
bOk bOk || ((nMes >= 1) && (nMes <= 12)); 
    return 
bOk
   } 
   
   function 
valDia(oTxt){ 
    var 
bOk false
    var 
nDia parseInt(oTxt.value.substr(82), 10); 
    
bOk bOk || ((nDia >= 1) && (nDia <= finMes(oTxt))); 
    return 
bOk
   } 
   
   function 
valFecha(oTxt){ 
    var 
bOk true
        if (
oTxt.value != ""){ 
            
bOk bOk && (valDia(oTxt)); 
            
bOk bOk && (valMes(oTxt)); 
            
bOk bOk && (valAno(oTxt)); 
            
bOk bOk && (valSep(oTxt)); 
            if (!
bOk){ 
                 
alert("Fecha inválida");
                 
oTxt.value ""
                 
oTxt.focus(); 
            } else 
alert("Fecha correcta"); 
        } 
   } 
</script> 
</head> 
<body> 
  <form name="frm"> 
   Escriba fecha (aaaa/mm/dd): 
   <input type="text" size="10" name="fec"> 
   <br> 
   <input type="button" value="Validar" onclick="valFecha(document.frm.fec)"> 
  </form> 
</body> 
</html> 
.... Donde esta el error
__________________
"La vida sigue su curso, tú toma parte de ella."
  #2 (permalink)  
Antiguo 02/01/2007, 13:20
 
Fecha de Ingreso: enero-2007
Mensajes: 405
Antigüedad: 18 años, 2 meses
Puntos: 3
Re: Validar fecha aaaa/mm/dd

creo que lo mas facil para validar eso, seria con Expresiones Regulares

algo tal que asi:
Código:
var expreg = /^([0-9]{4})\/([0-9]{2})\/([0-9]{2})$/;
Al colocar parentesis en los grupos, como por ejemplo ([0-9]{2})
se pueden acceder a ellos.

Para el primero seria $1 (año)
Para el segundo, $2 (mes)
Para el tercero, $3 (dia)

Código:
if(expreg.test(fecha)){
         if($1 lo que sea) Aqui ya compruebas que el año este correcto {
            ....
         }
         if($2 ...) para el mes {
            ....
         }
         if($3 ...) para el dia{
            ....
         }      
}


Creo que asi es mas fácil y por lo menos el código será mas corto
  #3 (permalink)  
Antiguo 02/01/2007, 14:54
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 5 meses
Puntos: 1
De acuerdo Lo encontre ....

Bueno ... buscando , buscando y con algunas modificaciones se pudo por fin validar .... espero le sirva a alguien que tambien tenga el mismo requerimiento.

index.php
Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<
html>
<
head>
<
title>.:: Validator ::.</title>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<
script language="JavaScript" type="text/javascript" src="clsValidator.js">
/**************************************************************************** 
* VALIDADOR DE FECHA EN DISTINTOS FORMATOS
****************************************************************************/
</script>

<script language="JavaScript" type="text/JavaScript">
<!--
function validate() 
{
    var Validar = new clsValidator();
    //**********************************************************
    //Uso todos los valores por defecto
    //**********************************************************
    //Se podrian cambiar:
    //Validar.setEncabezado("[- Hay errores en el formulario -]");
    //Validar.setErrorColor("#FFCC00");
    //validar.setFormatoHora('24');
    //validar.setFormatoFecha('ISO');
    
    //5- Valido que la fecha sea correcta
    Validar.Fecha("fechaNac", "Fecha no válida");
    
    //Disparo la Validación
    if (Validar.Validar()) alert("El formulario está bien completo, submiting data...");
    else Validar.getErrors();
}
//-->
</script>

<link href="estilos.css" rel="stylesheet" type="text/css">
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td><table width="275" border="0" align="left" cellpadding="0" cellspacing="0" class="txtNegro">
        <tr> 
          <td><div align="right">Fecha de nacimiento:</div></td>
          <td width="120"> <input name="fechaNac" type="text" class="campos" id="fechaNac">
          </td>
        </tr>
        <tr> 
          <td>&nbsp;</td>
          <td><div align="right"> 
              <input name="Button" type="button" class="botones" onClick="validate()" value="validar">
            </div></td>
        </tr>
      </table></td>
  </tr>
</table>
</body>
</html> 
clsValidator.js
Código PHP:
/****************************************************************************/
function clsValidator() 
{
    
/* Data members */
    
this.msgError="";                                                            // Return the msg error
    
this.errorColor="#FFC1C1";                                                    // color de error x defecto
    
this.head "ERROR: ... "// encabezado del mensaje de error x defecto
    
this.formatoFecha "ISO"                                                    // formato de fecha x defecto
    
this.error false;            

    
/* Methods */
    ///////////////////////////////////////////////////////////

    
function setEncabezado(head)    
    {
        
this.head head;
    }
    
///////////////////////////////////////////////////////////

    
function AgregarError() {
        
this.error=true;
        
this.msgError += "* "+arguments[0]+"\n";
        for (var 
i=1arguments.length i++) 
        {
            
document.getElementById(arguments[i]).style.backgroundColor=this.errorColor;
        }
    }
    
///////////////////////////////////////////////////////////
    
    
function EliminarError()
    {
        for (var 
i=0arguments.length i++) 
        {
            
document.getElementById(arguments[i]).style.backgroundColor="";
        }
    }
    
///////////////////////////////////////////////////////////
    
    
function setErrorColor(color)
    {
        
this.errorColor color;
    }
    
///////////////////////////////////////////////////////////
    
    
function setFormatoFecha(value)
    {
        
this.formatoFecha value;
    }    
    
    
///////////////////////////////////////////////////////////

    
function Vacio(field,msg
    {
        
this.EliminarError(field);
        if (
document.getElementById(field).value.replace(/ /g'') == "")
        {
            
this.AgregarError(msgfield);
            return 
false
        
}
        return 
true
    
}
    
///////////////////////////////////////////////////////////
    
    
function Fecha(fieldmsg
    {
        
this.EliminarError(field);
    
        var 
datePat;
        var 
formatoCorrecto;
        
        switch(
this.formatoFecha) {
            case 
'ISO':
                
datePat = /^(?:(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(/|-|.)(?:0?21(?:29))$)|(?:(?:1[6-9]|[2-9]d)?d{2})(/|-|.)(?:(?:(?:0?[13578]|1[02])2(?:31))|(?:(?:0?[1,3-9]|1[0-2])2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))2(?:0?[1-9]|1d|2[0-8]))$/;
                
formatoCorrecto "aaaa/mm/dd";
                break;
            case 
'EURO'
                
datePat = /^((([0][1-9]|[12][d])|[3][01])[-/]([0][13578]|[1][02])[-/][1-9]ddd)|((([0][1-9]|[12][d])|[3][0])[-/]([0][13456789]|[1][012])[-/][1-9]ddd)|(([0][1-9]|[12][d])[-/][0][2][-/][1-9]d([02468][048]|[13579][26]))|(([0][1-9]|[12][0-8])[-/][0][2][-/][1-9]ddd)$/;
                
formatoCorrecto "dd/mm/aaaa";
                break;
            case 
'ANSI':
                
datePat = /^((d{2}(([02468][048])|([13579][26]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|([1-2][0-9])))))|(d{2}(([02468][1235679])|([13579][01345789]))[-/s]?((((0?[13578])|(1[02]))[-/s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[-/s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[-/s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(s(((0?[1-9])|(1[0-2])):([0-5][0-9])((s)|(:([0-5][0-9])s))([AM|PM|am|pm]{2,2})))?$/;
                
formatoCorrecto "aaaa/mm/dd hh:mm:ss am/pm";
                break;
        }        
        
        var 
matchArray document.getElementById(field).value.match(datePat);
        if (
matchArray != null) return true
        
else
        {
            
msg += ' [formato: '+formatoCorrecto+']'
            
this.AgregarError(msgfield);
            return 
false;        
        }
    }
    
///////////////////////////////////////////////////////////
    
    
function Longitud(fieldoperatorlengthmsg)
    {
        
this.EliminarError(field);
        if (
operator == "="operator "==";
        if ( !(eval(
"document.getElementById(field).value.length "+operator+" length")) )
        {
            
this.AgregarError(msgfield);
            return 
false
        
}
        return 
true
    
}
    
///////////////////////////////////////////////////////////
    
    
function Valor(fieldoperatorvalormsg)
    {
        
this.EliminarError(field);
        if (
operator == "="operator "==";
        if ( !(eval(
"document.getElementById(field).value "+operator+" valor")) )
        {
            
this.AgregarError(msgfield);
            return 
false
        
}
        return 
true
    
}
    
///////////////////////////////////////////////////////////

    
function Validar() 
    {
        return !
this.error;
    }
    
///////////////////////////////////////////////////////////

    
function getErrors() 
    {
        
alert(this.head+"\n\n"+this.msgError);
    }
    
///////////////////////////////////////////////////////////

    
this.setEncabezado setEncabezado;
    
this.setErrorColor setErrorColor;
    
this.setFormatoFecha setFormatoFecha;
    
this.getErrors getErrors;
    
this.AgregarError AgregarError;
    
this.EliminarError EliminarError;
    
this.Vacio Vacio;
    
this.Fecha Fecha;
    
this.Validar Validar;    
}
////////////////////////////////////////////////////////////////// 
estilos.css
Código PHP:
.campos {
    
font-familyArialHelveticasans-serif;
    
font-size:  10px;
    
color#000000;
    
background-color#e6e6e6;
    
border1px solid #333333;
    
width120px;

}


.
body {
    
background-color#ffffff;
}

.
botones {
    
font-familyArialHelveticasans-serif
    
font-size10px;
    
color#993300;
    
background-color#CCCCCC;
    
border1px solid #000000;
}



.
linkAzul {
    
font-family"MS Sans Serif"Arial
    
font-size11px;
    
color#025587;
    
TEXT-DECORATIONunderline;
}


.
subMenuMovil {
    
font-familyArialHelveticasans-serif;
    
font-size10px;
    
color#02466F;
    
TEXT-DECORATIONnone;
}


.
tituloTrabajo {
    
font-family"MS Sans Serif"Arial
    
font-size11px;
    
color#993400;
    
TEXT-DECORATIONnone;
    
text-transformuppercase;
    
font-weightbold;
}


.
txtGris {
    
font-familyArialHelveticasans-serif
    
font-size:  11px;
    
color#666666;
}

.
txtNegro {
    
font-familyArialHelveticasans-serif;
    
font-size11px;
    
color#000000;
    
TEXT-DECORATIONnone;
    
text-transformnone;

.... esta super ....
__________________
"La vida sigue su curso, tú toma parte de ella."
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 19:17.