Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Em Função Que Formata A Data No Momento Da Digitação


MxPirex

Pergunta

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 data
function 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 :thumbsup:

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

cara, você pode criar um contador, e ai voce determina que a funcao faz uma determinada coisa, dependendo do valor do contador.

sugestao: não é melhor comecar no OnKeyDown??

Link para o comentário
Compartilhar em outros sites

  • 0

eu até pensei nisso q você falou, mas sabe qual é o problema?

no código desenvolvido, em relação às posições, são as barrras "/".

no caso do 2º dígito do dia, assim que validar, a função já traz a "/", no caso do 2º dígito do mes tb. Isso ta me complicando no contador...

Vou tentar sua sugestão...

[]'s

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...