Regex com decimais em C# - Resolvido!

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:
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.
 
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
 
não falta aí um ".|," para aceitar ponto ou virgula?
não tenho a certeza se é assim, sou uma nodoa em expressoes regulares.
 
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


entendi sim obrigada :)
 
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 :(
 
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.
 
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.
 
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:
Back
Topo