1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

javascript validação txtbox c#e

Discussão em 'Web Development' iniciada por alfinete, 24 de Março de 2009. (Respostas: 19; Visualizações: 1752)

  1. alfinete

    alfinete Power Member

    como tenho uma grid que é dinamica em linhas e em colunas , tive de a criar tda á mão em codigo c# a ser chamada numa tag asp:table

    ate ai tudo bem

    agra tenho de validar um campo de caixa de texto que la tenho para so aceitar numeros entre 0 e 20 ate 2 casas decimais

    tenho este expressão regular em c# que dá para isso


    Código:
      private bool valida_digitos(string str)
                      {
    
                        Regex Digit =new Regex(@"^(1[0-9]|2[0]|1[0-9],[0-9]{1,2})$");
                      
                        return Digit.IsMatch(str);
    
                      } 
    agora queria adaptar esta expressão regular que devolve true ou false conforme a string recebida pertence ou não aos acarcteres aceites , para ser chamada com javascript

    para na caixa de texto fazer

    text.atributs.add("","")..............................

    gostava de quando fosse falso o digitado apagasse logo ...

    agradecia uma ajuda
     
    Última edição: 24 de Março de 2009
  2. alfinete

    alfinete Power Member

    tenho aqui um javascript sem expressão regular que funciona, acaita so numeros e ,

    se desse para adaptar este so aceitar "," caso exista um digito, e so deixar digitar uma "," em tdo
    o numero digitado

    do tipo

    ,20 , não aceita
    0,20,0 não aceita

    2,0 aceita

    em relação ao 20 , aceita 20 ;20,0;20,00

    não aceita 20,01, 20,1 ; 20;10 e por ai fora,

    Código:
    function NumberForCurrency(e){
            var unicode=e.charCode? e.charCode : e.keyCode
    
            if(unicode != 44){
                if (unicode!=8){ 
                    if (unicode<48||unicode>57) //se não for um número
                        return false
                }
            }
        }
        
    

    se me dessem uma ajuda a alterala agradecia
     
  3. geoblast

    geoblast Power Member

    O «aceitar» ou não está relacionado com o evento. Se associares a tua validação ao onchange, ou ao onblur, cada vez que esse evento ocorrer vais executar a tua validação.

    Para fazeres o que queres, associas a tua validação ao onkeyup e crias uma nova função que vai percorrer o teu string e verificar se já existe uma vírgula ou não, retornando verdadeiro ou falso. Invocas essa função no início da função de validação.

    Não sei fui claro...
     
  4. alfinete

    alfinete Power Member

    percebi o teu raciocinio , mas implementar isso em javascript, é mais critico, pois não é bem o meu forte , por isso caso pudesses agradecia que ma arranja-se ou a minha alterada ou algo que tenhas ja feito para esse efeito

    preferia que fosse com keypress de forma a não deixar escrever o que não interessa

    thanks
     
    Última edição: 24 de Março de 2009
  5. p3dro

    p3dro Power Member

    Tentei usar a tua regular expression mas não funcionou.

    Vê este exemplo:

    Código:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    
      <script type="text/javascript">
        var IsValid = function(event) {
          event = event || window.event;
          var e = {
            which: event.which ? event.which : event.keyCode,
            id: (event.target || event.srcElement).id
          };
          var value = document.getElementById(e.id).value;
          var ch=String.fromCharCode(e.which);
    
          if (ch === "." && value.length>0 && value.indexOf(".") === -1 ) {return true;}
          value += ch;
          return (/^\d*(\.\d{1,2})?$/.test(value) && value<=20);
        };
      </script>
    
    </head>
    
    <body>
        <input type="text" name="txt" id="txt" onkeypress="return IsValid(event);" />
    </body>
    </html>
    Utilizei o value<=20 porque não sei como fazer isso directamente na regular expression :sad:
     
  6. alfinete

    alfinete Power Member

    thanks , tens aqui uma regex que faz isso tdo que disse

    Regex Digit =new Regex(@"^(1[0-9]|2[0]|1[0-9],[0-9]{1,2})$");


    como posso adaptar ao teu code
     
  7. p3dro

    p3dro Power Member

    Posso estar a fazer alguma coisa mal, mas essa regular expression não me dá o resultado previsto.

    Mas para a adaptares, terás de alterar esta linha:

    return (/^\d*(\.\d{1,2})?$/.test(value) && value<=20);

    para

    return /^(1[0-9]|2[0]|1[0-9],[0-9]{1,2})$/.test(value);
     
  8. alfinete

    alfinete Power Member

    pus assim mas nam escreve nada

    Código:
     var IsValid = function(event) {
          event = event || window.event;
          var e = {
            which: event.which ? event.which : event.keyCode,
            id: (event.target || event.srcElement).id
          };
          var value = document.getElementById(e.id).value;
         
         
          var ch=String.fromCharCode(e.which);
    
          if (ch === "." && value.length>0 && value.indexOf(".") === -1 ) {return true;}
          value += ch;
          return /^(1[0-9]|2[0]|1[0-9],[0-9]{1,2})$/.test(value); 
    
         
        };
    
    a expressão ^(1[0-9]|2[0]|1[0-9],[0-9]{1,2})$ diz

    so aceitas numeros em que primeiro algarismo é sempre 1 e os seguinte a este so pode ser entre 0 e 9

    ou

    o primeiro digito é 2 e o seguinte so pode ser 0

    ou

    o primeiro algarismo é 1 e o seguinte so pode ser entre 0 e 9 com uma virgula em que os seguintes podem ser entre 0 e 9 com uma ou duas casas decimais

    ou seja não aceita nehum caracter
     
    Última edição: 25 de Março de 2009
  9. p3dro

    p3dro Power Member

    Pois, estou a perceber, então por ex. o número 5,90 satisfaz essa regular expression? Infelizmente não te consigo ajudar na regular expression
     
  10. alfinete

    alfinete Power Member

    sim o que diseste é verdade , e adaptar a primeira funçã javascript para o efeito do que faz essa regular expression ....

    dará .
     
  11. p3dro

    p3dro Power Member

    Tentei usar a expressão neste site e só funciona com números entre 10 e 19,99 ... mas também não sou a pessoa mais indicada para falar sobre regular expressions :p pode ser que alguém mais entendido te consiga dar uma melhor resposta.
     
  12. alfinete

    alfinete Power Member

    sim tens razaão quanto ao mudar de 0,00 ate onde ja esta é facil ..

    thanks

    ja agora eu tinha perguntado se a primeira hipotese que eu dei sem reg expression, dá para adaptar para por de 0 1 19,99 .....
     
  13. p3dro

    p3dro Power Member

    Acho que a maneira como eu tinha indicado da 1ª vez, funciona bem

    Código:
    return (/^\d*(\.\d{1,2})?$/.test(value) && value<=20);
     
  14. alfinete

    alfinete Power Member

    da, mas tem um prob, podes fazer 000000000000000020 , ou 00012,20

    so pode ter no maximo duas casas quer de um lado quer do otro
    e numeros de o a 20
     
  15. p3dro

    p3dro Power Member

    Nesse caso podes alterar para:

    Código:
    return (/^\d{1,2}(\.\d{1,2})?$/.test(value) && value<=20);
     
  16. alfinete

    alfinete Power Member

    Código:
    
    
    
         var IsValid = function(event) {
          event = event || window.event;
          var e = {
            which: event.which ? event.which : event.keyCode,
            id: (event.target || event.srcElement).id
          };
          var value = document.getElementById(e.id).value;
          var ch=String.fromCharCode(e.which);
    
          if (ch === "." && value.length>0 && value.indexOf(".") === -1 ) {return true;}
          value += ch;
          
          return (/^([0-9]|0,[0-9]{1,2}|1[0-9]|2[0]|1[0-9],[0-9]{1,2})$/.test(value) );
         /* return (/^\d*(\.\d{1,2})?$/.test(value) && value<=20);*/
        };
    
    
    
    
    pus assim e so da numeros sem virgulas de 0 a 20


    mas se for testar a regex em http://www.fileformat.info/tool/regex.htm

    ja aceita virgulas

    e que tal uma ajuda
     
  17. p3dro

    p3dro Power Member

    O código que eu tinha exemplificado, só aceitava ".", tens de fazer esta alteração:

    Código:
    if (ch === "," && value.length>0 && value.indexOf(",") === -1 ) {return true;}
    Essa regular expression não funciona para valores <=9,99
     
    Última edição: 26 de Março de 2009
  18. alfinete

    alfinete Power Member

    no caso de ser 20 esta a aceitar , e não devia

    a regex não aceita

    como poderei fazer

    a regex ja foi alterada

    /^([1-9],[0-9]{1,2}|[0-9]|0,[0-9]{1,2}|1[0-9]|2[0]|1[0-9],[0-9]{1,2})$/

    esta sim a final

    Código:
    
      var IsValid = function(event) {
          event = event || window.event;
          var e = {
            which: event.which ? event.which : event.keyCode,
            id: (event.target || event.srcElement).id
          };
          var value = document.getElementById(e.id).value;
          var ch=String.fromCharCode(e.which);
    
          if ((ch == "," && value.length>0 && value.indexOf(",") == -1)) {return true;}
          value += ch;
          
          return (/^([1-9],[0-9]{1,2}|[0-9]|0,[0-9]{1,2}|1[0-9]|2[0]|1[0-9],[0-9]{1,2})$/.test(value));
         /* return (/^\d*(\.\d{1,2})?$/.test(value) && value<=20);*/
        };
    
    
    o prob é que a regex não eceita 20,

    e algo existe na função js que a faz aceitar e eu não consigo contrariar a situação

    gostava de um help
     
    Última edição: 26 de Março de 2009
  19. alfinete

    alfinete Power Member

    e com esta expressão para aceitar o 20,00

    ^([1-9],[0-9]{1,2}|[0-9]|0,[0-9]{1,2}|1[0-9]|2[0]|2[0],[0]{1,2}|1[0-9],[0-9]{1,2})$

    o que fica assim

    Código:
    
    
      var IsValid = function(event) {
          event = event || window.event;
          var e = {
            which: event.which ? event.which : event.keyCode,
            id: (event.target || event.srcElement).id
          };
          var value = document.getElementById(e.id).value;
          var ch=String.fromCharCode(e.which);
    
          if ((ch == "," && value.length>0 && value.indexOf(",") == -1)) {return true;}
          value += ch;
          
          return (/^([1-9],[0-9]{1,2}|[0-9]|0,[0-9]{1,2}|1[0-9]|2[0]|2[0],[0]{1,2}|1[0-9],[0-9]{1,2})$
    
    /.test(value));
         /* return (/^\d*(\.\d{1,2})?$/.test(value) && value<=20);*/
        };
    
     
    que funciona na perfeição

    dentro desse javascript tb não aceita, nem 0 20, nem o 20,00

    giostava de um help
     
    Última edição: 27 de Março de 2009
  20. p3dro

    p3dro Power Member

    Tenta desta maneira


    Código:
    return /^([1-9],[0-9]{1,2}|[0-9]|0,[0-9]{1,2}|1[0-9]|20(,[0-0]{1,2})?|1[0-9],[0-9]{1,2})$/.test(value);
     

Partilhar esta Página