Ir para conteúdo

POWERED BY:

Arquivado

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

MxPirex

Tenho a função pronta. Preciso implementar...

Recommended Posts

Galera, preciso de um help.

 

Tenho abaixo o fonte de uma função que formata um campo em html que recebe uma data. Ela foi desenvolvida com o intuito de validar a data assim que o usuário digita. As barras já colocadas automaticamente. Em relação ao dia, a função não pode permitir que o usuário digite o dia sendo maior que 31. No primeiro dígito, a função funciona beleza... Mas no segundo dígito a função aceita qualquer número, e assim por diante, até o final.

 

Deixei o código completo pra ajudar. No html, chamo a função no evento "onkeyup", assim: onkeyup="formata(this);"

 

Como faço pra validar a digitação a partir do segundo dígito?

 

 

// função que coloca as barras na datafunction formata(val){  var teste = false; // variavel booleana q será usada para teste apenas	  var pass = val.value;  var expr = /[0123456789]/;  for(i=0; i<pass.length; i++)  {			// charAt -> retorna o caractere posicionado no índice especificado	var lchar = val.value.charAt(i);	var nchar = val.value.charAt(i+1);	var ichar = val.value.charAt(i+2);	//ichar significa invalid char	if (i == 0)	{	  // search -> retorna um valor inteiro, indicando a posição do inicio da primeira	  // ocorrência de expReg dentro de instStr. Se nenhuma ocorrencia for encontrada o método retornara -1	  // instStr.search(expReg);	  if ((lchar.search(expr) != 0) || (lchar>3))	val.value = "";	}			else if(i == 1)	{	  if (lchar.search(expr) != 0){		// substring(indice1,indice2)		// indice1, indice2 -> será usado para delimitar a string		var tst1 = val.value.substring(0,(i));		val.value = tst1;		continue;	  }	  if ((nchar != '/') && (nchar != '')){		var tst1 = val.value.substring(0, (i)+1);	  		if(nchar.search(expr) != 0)		var tst2 = val.value.substring(i+2, pass.length);		else		  var tst2 = val.value.substring(i+1, pass.length);	  val.value = tst1 + '/' + tst2;}				} // fim else if					else if (i == 3)	{	  if (lchar.search(expr) != 0){		var tst1 = val.value.substring(0,(i));		val.value = tst1;	  }				}			else if(i == 4)	{		  if(lchar.search(expr) != 0)	  {		var tst1 = val.value.substring(0, (i));		val.value = tst1;		continue;	  }	  if  ((nchar != '/') && (nchar != ''))	  {		var tst1 = val.value.substring(0, (i)+1);		if(nchar.search(expr) != 0)	  var tst2 = val.value.substring(i+2, pass.length);		else	  var tst2 = val.value.substring(i+1, pass.length);	   val.value = tst1 + '/' + tst2;	  }	} // fim else if	if(i >= 6)	{	  if(lchar.search(expr) != 0)	  {		var tst1 = val.value.substring(0, (i));		val.value = tst1;	  }	}  } // fim for  if (pass.length>10)	val.value = val.value.substring(0, 10);			return true;} // fim função
Quem puder ajudar, agradeço!

 

[]'s http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que estranho... na minha página realmente não funcionou...

 

Bem, de qualquer maneira, eu modifiquei o código e aparentemente está bom. O único detalhe é que a função obriga o usuário digitar a data no formato DD/MM/AA ou DD/MM/AAAA.

Se tentar digitar 1/5/2006 não vai conseguir, é obrigado a digitar o zero.

Como faz parte de um projeto aqui no serviço, mesmo com as minhas sugestões, acharam melhor assim.

 

Eu tratei no método CharAt(i) dentro dos loopings o que está sendo digitado. Por exemplo, no caso do mês, a função não aceita 00 ou nºs maiores que 12.

 

De qq maneira, valeu pelo help. Abaixo, código atualizado (pra quem quiser analisar, aconselho a copiar e colar num editor):

 

[]'s

 

 

function formata(val){		var pass = val.value;	var expr = /[0123456789]/;	for(i=0; i<pass.length; i++){				// charAt -> retorna o caractere posicionado no índice especificado		var lchar = val.value.charAt(i);			var nchar = val.value.charAt(i+1);				var xchar = val.value.charAt(i-1);  // caracter anterior 						if (i == 0){			// search -> retorna um valor inteiro, indicando a posição do inicio da primeira			// ocorrência de expReg dentro de instStr. Se nenhuma ocorrencia for encontrada o método retornara -1			// instStr.search(expReg);			if ((lchar.search(expr) != 0) || (lchar>3))				val.value = "";					}				else if(i == 1){						// valida 2º dígito do dia, não pode ser maior que 31			// e não aceita dia menor que 01					if ((xchar == 3 && lchar > 1) || (xchar == 0 && lchar == 0)){				var tst1 = val.value.substring(0,i);				val.value = tst1;				val = tst1;			}						else{				if (lchar.search(expr) != 0){					// substring(indice1,indice2)					// indice1, indice2 -> será usado para delimitar a string					var tst1 = val.value.substring(0,i);					val.value = tst1;					continue;				}				if ((nchar != '/') && (nchar != ''))				{					var tst1 = val.value.substring(0,(i)+1);					if(nchar.search(expr) != 0)						var tst2 = val.value.substring(i+2, pass.length);					else						var tst2 = val.value.substring(i+1, pass.length);					val.value = tst1 + '/' + tst2;				}								}// fim else					} // fim else if						else if (i == 3){									if (lchar.search(expr) != 0){				var tst1 = val.value.substring(0,i);				val.value = tst1;							}			else{				if(lchar > 1){					var tst1 = val.value.substring(0,i);					val.value = tst1;					val = tst1;				}			}		}//fim else if				else if(i == 4){						if ((xchar == 1 && lchar > 2) || (xchar == 0 && lchar == 0)){				var tst1 = val.value.substring(0,i);				val.value = tst1;				val = tst1;			}			else{				if(lchar.search(expr) != 0){					var tst1 = val.value.substring(0,i);					val.value = tst1;					continue;				}				if	((nchar != '/') && (nchar != '')){					var tst1 = val.value.substring(0, (i)+1);					if(nchar.search(expr) != 0)						var tst2 = val.value.substring(i+2, pass.length);					else						var tst2 = val.value.substring(i+1, pass.length);					val.value = tst1 + '/' + tst2;				}			}		}// fim else if		if(i >= 6){			if(lchar.search(expr) != 0) {				var tst1 = val.value.substring(0, (i));				val.value = tst1;			 }		}	}// fim looping	if (pass.length > 10)		val.value = val.value.substring(0, 10);			return true;}

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.