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

Regex com decimais em C# - Resolvido!

Discussão em 'Programação' iniciada por candycane, 7 de Agosto de 2008. (Respostas: 13; Visualizações: 5242)

  1. candycane

    candycane Power Member

    Boa tarde! :)

    estou a tentar usar o regex para ter a certeza que o nº introduzido pelo utilizador coincide com o campo da base de dados.

    Só que não consigo encontrar a expressão certa para tal.

    O que pretendo é:

    que o o numero seja decimal com 4 digitos antes do . ou , e depois 2 digitos, ou seja, o numero tem que ser no maximo assim:

    4444.22 ou 4444,22


    o codigo que tenho é este, mas não funciona :( Tmabém da-me um erro no IsMatch...
    Código:
     
    [SIZE=2][COLOR=#0000ff]string[/COLOR][/SIZE][SIZE=2][COLOR=#000000] verifica = [/COLOR][/SIZE][SIZE=2][COLOR=#800000]"[0-9]{4}.[0-9]{2}"[/COLOR][/SIZE][SIZE=2][COLOR=#000000];[/COLOR]
    [/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#008080]Regex[/COLOR][/SIZE][SIZE=2].IsMatch(verifica))
    {
    }
    [/SIZE] 
    
     
    Última edição: 7 de Agosto de 2008
  2. AliFromCairo

    AliFromCairo Power Member

    Boas, estás a utilizar o método estático da classe Regex que recebe dois argumentos: a expressão regular e a string que queres testar. Tu estás a passar apenas um argumento.

    Alternativamente, podes criar uma nova instância da classe Regex passando a expressão regular no construtor, sendo que em seguida podes utilizar o método IsMatch passando a string a testar como argumento.
     
  3. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Eu ainda não sei trabalhar com regexps, e não sei trabalhar com C#, mas isso do IsMatch, não tens de lhe passar uma regular expression e uma string a avaliar? É que em Perl seria algo como if($string =~ /regexp/), porque estás a fazer um match da string $string com a regular expression /regexp/. Onde é que está a dita string aí?

    Espero ter-me feito entender :x

    edit - ok, foi o que o AliFromCairo disse :P
     
  4. sapropel

    sapropel Power Member

    não falta aí um ".|," para aceitar ponto ou virgula?
    não tenho a certeza se é assim, sou uma nodoa em expressoes regulares.
     
  5. slack_guy

    slack_guy Power Member

    Será assim?
    Código:
    "^\d{4}[,.]\d{2}$"
    
     
    Última edição: 7 de Agosto de 2008
  6. candycane

    candycane Power Member


    entendi sim obrigada :)
     
  7. candycane

    candycane Power Member

    eu ja consegui que o isMatch funcione, mas não atino é com a expressão :(

    tenho assim:
    Código:
    
    Regex teste = new Regex("^\\d{4}.\\d{2}$"); 
    
                if (!teste.IsMatch(txt.Text))
                {
                    MessageBox.Show("Não é decimal.", "msg erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    MessageBox.Show("É decimal.", "msg erro", MessageBoxButtons.OK);
    
                }
    
    
    
    diz sempre que n é decimal :(
     
  8. candycane

    candycane Power Member

    também não da :(
     
  9. AliFromCairo

    AliFromCairo Power Member

    Hmm, falta-te apenas a vírgula nessa expressão (para a incluires, vê a expressão regular que o slack_guy colocou acima).

    Como está, deveria aceitar "4444.20", por exemplo. Verifica se o valor de txt.Text não tem espaços ou substitui txt.Text por txt.Text.Trim() para os suprimir.
     
  10. candycane

    candycane Power Member

    O problema é k so me aceita numero to tipo 4444.22, se for 444 ou 4.2 já n aceita :(
     
  11. AliFromCairo

    AliFromCairo Power Member

    Sim, mas isso é uma expressão regular diferente :007:. Ficaria algo deste género:

    Código:
    "^\\d{1,4}([.,]\\d{1,2})?$"
    
    Não estou a considerar casos como ".20" ou "20.", mas também podem ser facilmente incluídos.
     
  12. candycane

    candycane Power Member


    Perfeito!!! :)

    so modifiquei o 1,4 e o 1,2

    "^\\d{0,4}([,.]\\d{0,2})?$";

    Obrigada :)
     
  13. AliFromCairo

    AliFromCairo Power Member

    Mas repara que assim a tua expressão vai aceitar uma string que tenha apenas o caractér "." ou "," :007:. Uma maneira simples de resolveres isso é obrigares a tua string a ter dígitos, utilizando o operador de lookahead ((?=\d+)). Algo deste género:

    Código:
    [SIZE=2]"^[B](?=\\d+)[/B]\\d{0,4}([.,]\\d{0,2})?$"[/SIZE]
    
    Este operador vai garantir que todos os inputs válidos têm de ter dígitos.
     
    Última edição pelo moderador: 7 de Agosto de 2008
  14. candycane

    candycane Power Member

    Ahhh por acaso n tinha testado so com . ou , lolol

    brigada pela dica! :D
     

Partilhar esta Página