javascript validação txtbox c#e

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:
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
 
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

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...
 
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:
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:
 
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
 
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

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);
 
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:
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

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
 
sim o que diseste é verdade , e adaptar a primeira funçã javascript para o efeito do que faz essa regular expression ....

dará .

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.
 
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 .....
 
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 .....

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

Código:
return (/^\d*(\.\d{1,2})?$/.test(value) && value<=20);
 
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
 
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
 
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

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:
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:
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:
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);
 
Back
Topo