Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rgto

Validar data em Javascript

Recommended Posts

alguém possui alguma função que valida uma "data de aniversário por exemplo" de uma string digitada pelo usuário?exemplo, se o usuário digitar 10-08-2004 o sistema informa "data válida", se o usuário digitar 10-80-2004 o sistema informa "data inválida".

Compartilhar este post


Link para o post
Compartilhar em outros sites
//#####################//# VALIDAÇÃO DA DATA #//#####################function VerificaData(cData) {	var data = cData; 	var tam = data.length;	if (tam != 10) {  return false;	}	var dia = data.substr(0,2)	var mes = data.substr (3,2)	var ano = data.substr (6,4)		if (ano < 1980)	{  return false;	}    if (ano > 2010)	{  return false;	}	switch (mes) {  case '01': 	 if  (dia <= 31)     return (true); 	 break;  case '02': 	 if  (dia <= 29)     return (true); 	 break;  case '03': 	 if  (dia <= 31)     return (true); 	 break;  case '04': 	 if  (dia <= 30)     return (true); 	 break;  case '05': 	 if  (dia <= 31)     return (true); 	 break;  case '06': 	 if  (dia <= 30)     return (true); 	 break;  case '07': 	 if  (dia <= 31)     return (true); 	 break;  case '08': 	 if  (dia <= 31)     return (true); 	 break;  case '09': 	 if  (dia <= 30)     return (true); 	 break;  case '10': 	 if  (dia <= 31)     return (true); 	 break;  case '11': 	 if  (dia <= 30)     return (true); 	 break;  case '12': 	 if  (dia <= 31)     return (true); 	 break;	}	{  return false;	}	return true; }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando por base seu cod, ajustei umas coisinhas, agora também filtra ano bissexto, vejam!!!

 

<html><script language="JavaScript">//VALIDAÇÃO DA DATA function VerificaData(digData) {	var bissexto = 0;	var data = digData; 	var tam = data.length;	if (tam == 10) 	{		var dia = data.substr(0,2)		var mes = data.substr(3,2)		var ano = data.substr(6,4)		if ((ano > 1900)||(ano < 2100))		{			switch (mes) 			{				case '01':				case '03':				case '05':				case '07':				case '08':				case '10':				case '12':					if  (dia <= 31) 					{						return true;					}					break								case '04':						case '06':				case '09':				case '11':					if  (dia <= 30) 					{						return true;					}					break				case '02':					/* Validando ano Bissexto / fevereiro / dia */ 					if ((ano % 4 == 0) || (ano % 100 == 0) || (ano % 400 == 0)) 					{ 						bissexto = 1; 					} 					if ((bissexto == 1) && (dia <= 29)) 					{ 						return true;				 					} 					if ((bissexto != 1) && (dia <= 28)) 					{ 						return true; 					}								break									}		}	}		alert("A Data "+data+" é inválida!");	return false;}</script><body>Digite a data no seu nascimento:<form method="POST" action="" target="_self" name="frm"><INPUT type=text NAME="data" id="data" SIZE=10 MAXLENGTH=10 onBlur="VerificaData(this.value);"></form>   					</body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites
//Validar data	function validaData(campo)	{		if (campo.value!="")		{			erro=0;			hoje = new Date();			anoAtual = hoje.getFullYear();			barras = campo.value.split("/");			if (barras.length == 3)			{			   	dia = barras[0];				mes = barras[1];				ano = barras[2];				resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900));				if (!resultado)				{					alert("Data inválida.");					campo.focus();					return false;				}			 } 			 else			 {				 alert("Data inválida.");				 campo.focus();				 return false;			 }		return true;		}	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue algumas funções úties para formatação e verificação de datas:

 

usamos essa função no evento onsubmit do form...

 

function CheckDate(pObj) {
  var expReg = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/(19|20)?\d{2}$/;
  var aRet = true;
  if ((pObj) && (pObj.value.match(expReg)) && (pObj.value != '')) {
	var dia = pObj.value.substring(0,2);
	var mes = pObj.value.substring(3,5);
	var ano = pObj.value.substring(6,10);
	if (mes == 4 || mes == 6 || mes == 9 || mes == 11 && dia > 30) 
	  aRet = false;
	else 
	  if ((ano % 4) != 0 && mes == 2 && dia > 28) 
		aRet = false;
	  else
		if ((ano%4) == 0 && mes == 2 && dia > 29)
		  aRet = false;
  }  else 
	aRet = false;  
  return aRet;
}

e para mascarar a data no evento onkeydown="java script:MaskField(this, Data);"

 

function MaskField(o,f) {
	v_obj = o;
	v_fun = f;
	setTimeout("ExecMask()",1);
}

function ExecMask() {
	v_obj.value = v_fun(v_obj.value);
}

function Data(v){
	v=v.replace(/\D/g,"");					
	v=v.replace(/(\d{2})(\d)/,"$1/$2");	   
	v=v.replace(/(\d{2})(\d)/,"$1/$2");	   
											 
	v=v.replace(/(\d{2})(\d{2})$/,"$1$2");
	return v;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

function CheckDate(pObj) {
  var expReg = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/(19|20)?\d{2}$/;
  var aRet = true;
  if ((pObj) && (pObj.value.match(expReg)) && (pObj.value != '')) {
	var dia = pObj.value.substring(0,2);
	var mes = pObj.value.substring(3,5);
	var ano = pObj.value.substring(6,10);
	if (mes == 4 || mes == 6 || mes == 9 || mes == 11 && dia > 30) 
	  aRet = false;
	else 
	  if ((ano % 4) != 0 && mes == 2 && dia > 28) 
		aRet = false;
	  else
		if ((ano%4) == 0 && mes == 2 && dia > 29)
		  aRet = false;
  }  else 
	aRet = false;  
  return aRet;
}

Ola Mago,

utilizei sua função acima porem tive um problema para validar qualquer dia dos meses 4, 6 e 9

para corrigir alterei o IF de verificação dos meses com 30 dias adicionando parenteses nos OR e deixando o AND sozinho.

o codigo ficou assim.

 

function CheckDate(pObj) {
  var expReg = /^((0[1-9]|[12]\d)\/(0[1-9]|1[0-2])|30\/(0[13-9]|1[0-2])|31\/(0[13578]|1[02]))\/(19|20)?\d{2}$/;
  var aRet = true;
  if ((pObj) && (pObj.value.match(expReg)) && (pObj.value != '')) {
	var dia = pObj.value.substring(0,2);
	var mes = pObj.value.substring(3,5);
	var ano = pObj.value.substring(6,10);
	if ((mes == 4 || mes == 6 || mes == 9 || mes == 11 ) && dia > 30) 
	  aRet = false;
	else 
	  if ((ano % 4) != 0 && mes == 2 && dia > 28) 
		aRet = false;
	  else
		if ((ano%4) == 0 && mes == 2 && dia > 29)
		  aRet = false;
  }  else 
	aRet = false;  
  return aRet;
}

grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consertando o post#3:

 

CODE
function validaData(dia, mes, ano) {

 

if ((ano > 1900)&&(ano < 2100)){

switch(mes)

{

case '01':

case '03':

case '05':

case '07':

case '08':

case '10':

case '12':

if (dia <= 31)

{

return true;

}

break

 

case '04':

case '06':

case '09':

case '11':

if (dia <= 30)

{

return true;

}

break

case '02':

 

var bissexto;

 

/* Validando ano Bissexto / fevereiro / dia */

if ((ano % 4 == 0) || (ano % 100 == 0) || (ano % 400 == 0))

{

bissexto = 1;

}

if ((bissexto == 1) && (dia <= 29))

{

return true;

}

if ((bissexto != 1) && (dia <= 28))

{

return true;

}

break;

}

}

 

return false;

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Eu sou novo em JavaScript e ainda estou a tentar perceber o mundo da programação. Surgiu-me uma duvida neste ultimo post que é a seguinte:

Se eu inserir o mês tipo 1 e não 01 o código funcionará ou terei que criar uma alternativa?

Desculpem a pergunta parva, mas aprender algumas coisas sozinhos só de ler livros e sem a explicação de professor é complicado :P.

 

Cumps \o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Muito Obrigado amigo Gutto :D.

 

Cumps \o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal estou procurando funcao javascript que valide data com ano bissexto.

Copie o que estava aqui e rodei mas nao funcionou.

Se alguem puder me ajudar?

 

Como coloco a funcao no formulario e se a data estiver errada onde coloco a mensagem?

 

Abraco pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirando a função que usa expressões regulares que eu não conheço as outras não estão verificando se o dia ou o mês são maiores que zero, cuidado quando usa-las pois se o usuário informar a data 00/01/2011 irá retornar true;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma função e testei de todas as formas que me veio na cabeça.

Espero ajudar.

Um exemplo de chamada seria: validaData('28/09/2011');

 

function validaData(stringData)
{
   /******** VALIDA DATA NO FORMATO DD/MM/AAAA *******/

   var regExpCaracter = /[^\d]/;     //Expressão regular para procurar caracter não-numérico.
   var regExpEspaco = /^\s+|\s+$/g;  //Expressão regular para retirar espaços em branco.

   if(stringData.length != 10)
   {
       alert('Data fora do padrão DD/MM/AAAA');
       return false;
   }

   splitData = stringData.split('/');

   if(splitData.length != 3)
   {
       alert('Data fora do padrão DD/MM/AAAA');
       return false;
   }

   /* Retira os espaços em branco do início e fim de cada string. */
   splitData[0] = splitData[0].replace(regExpEspaco, '');
   splitData[1] = splitData[1].replace(regExpEspaco, '');
   splitData[2] = splitData[2].replace(regExpEspaco, '');

   if ((splitData[0].length != 2) || (splitData[1].length != 2) || (splitData[2].length != 4))
   {
       alert('Data fora do padrão DD/MM/AAAA');
       return false;
   }

   /* Procura por caracter não-numérico. EX.: o "x" em "28/09/2x11" */
   if (regExpCaracter.test(splitData[0]) || regExpCaracter.test(splitData[1]) || regExpCaracter.test(splitData[2]))
   {
       alert('Caracter inválido encontrado!');
       return false;
   }

   dia = parseInt(splitData[0],10);
   mes = parseInt(splitData[1],10)-1; //O JavaScript representa o mês de 0 a 11 (0->janeiro, 1->fevereiro... 11->dezembro)
   ano = parseInt(splitData[2],10);

   var novaData = new Date(ano, mes, dia);

   /* O JavaScript aceita criar datas com, por exemplo, mês=14, porém a cada 12 meses mais um ano é acrescentado à data
        final e o restante representa o mês. O mesmo ocorre para os dias, sendo maior que o número de dias do mês em
        questão o JavaScript o converterá para meses/anos.
        Por exemplo, a data 28/14/2011 (que seria o comando "new Date(2011,13,28)", pois o mês é representado de 0 a 11)
        o JavaScript converterá para 28/02/2012.
        Dessa forma, se o dia, mês ou ano da data resultante do comando "new Date()" for diferente do dia, mês e ano da
        data que está sendo testada esta data é inválida. */
   if ((novaData.getDate() != dia) || (novaData.getMonth() != mes) || (novaData.getFullYear() != ano))
   {
       alert('Data Inválida!');
       return false;
   }
   else
   {
       alert('Data OK!');
       return true;
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há muito tempo escrevi uma função que faz a validação de data em javascript com expressão regular. Na sequẽncia, existe uma versão mais avançada que utiliza o objeto Date para validar a data exata.

 

Segue o código:

 

function validaData (e) {
 var divisor = '/'
 var data = e.value
 var dataAtual = ''
 if (data.match (/^(0[1-9]|[12][0-9]|3[01]).?(0[1-9]|1[012]).?([12][0-9]{3}|[0-9]{2})$/)) {
   data = data.replace (/[^0-9]/g, '')
   dataAtual = data.substr(0,2)+divisor+data.substr(2,2)+divisor
   if ( data.substr (4).length == 4 ) dataAtual += data.substr (4)
   else dataAtual += (data.substr (4) > 30 ? '19' : '20') + data.substr (4)
 }
 if (dataAtual != '') {
   x = dataAtual.split (divisor)
   confere = new Date (x[2],x[1]-1,x[0])
   confere2 = (confere.getDate () < 10 ? '0' : '') + confere.getDate ()
   confere2 += divisor + ((confere.getMonth()+1) < 10 ? '0' : '') + (confere.getMonth()+1)
   confere2 += divisor + confere.getFullYear()
   if (confere2 != dataAtual) dataAtual = ''
 }
 e.value = dataAtual
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.