View Full Version : Regex com decimais em C# - Resolvido!
candycane 07-08-2008, 20:15 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...
string verifica = "[0-9]{4}.[0-9]{2}";
if (Regex.IsMatch(verifica))
{
}
AliFromCairo 07-08-2008, 20:30 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 (http://www.techzonept.com/member.php?u=62945) disse :P
sapropel 07-08-2008, 22:10 não falta aí um ".|," para aceitar ponto ou virgula?
não tenho a certeza se é assim, sou uma nodoa em expressoes regulares.
slack_guy 07-08-2008, 22:22 Será assim?
"^\d{4}[,.]\d{2}$"
candycane 07-08-2008, 22:45 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 (http://www.techzonept.com/member.php?u=62945) disse :P
entendi sim obrigada :)
candycane 07-08-2008, 22:50 eu ja consegui que o isMatch funcione, mas não atino é com a expressão :(
tenho assim:
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 :(
candycane 07-08-2008, 22:57 Será assim?
"^\d{4}[,.]\d{2}$"
também não da :(
AliFromCairo 07-08-2008, 23:02 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.
candycane 07-08-2008, 23:09 O problema é k so me aceita numero to tipo 4444.22, se for 444 ou 4.2 já n aceita :(
AliFromCairo 07-08-2008, 23:19 Sim, mas isso é uma expressão regular diferente :007:. Ficaria algo deste género:
"^\\d{1,4}([.,]\\d{1,2})?$"
Não estou a considerar casos como ".20" ou "20.", mas também podem ser facilmente incluídos.
candycane 07-08-2008, 23:31 Sim, mas isso é uma expressão regular diferente :007:. Ficaria algo deste género:
"^\\d{1,4}([.,]\\d{1,2})?$"
Não estou a considerar casos como ".20" ou "20.", mas também podem ser facilmente incluídos.
Perfeito!!! :)
so modifiquei o 1,4 e o 1,2
"^\\d{0,4}([,.]\\d{0,2})?$";
Obrigada :)
AliFromCairo 07-08-2008, 23:44 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:
"^(?=\\d+)\\d{0,4}([.,]\\d{0,2})?$"
Este operador vai garantir que todos os inputs válidos têm de ter dígitos.
candycane 07-08-2008, 23:49 Ahhh por acaso n tinha testado so com . ou , lolol
brigada pela dica! :D
|
|