EXPRESSAO REGULAR NUMEROS E UMA VIRGULA

MICHAELL 06/07/2016 20:11:17
#464583
Ola pessoal

estou a horas tentando montar uma expressao regular, no qual extraia os números e apenas UMA virgula

eu fiz assim:
  campo = Regex.Replace(campo, @[Ô][^\d\[,]{1}\d][Ô],  [Ô][Ô]);  


assim o valor fica apenas com números e virgulas..
porém, não esta limitando 01 virgula.. se tiver 2 ou mais virgulas ele não tira.

o que falta nessa expressao para que isso:
string campo = [Ô]1,,,99[Ô] fique apenas campo = [Ô]1,99[Ô]?
KERPLUNK 06/07/2016 21:46:27
#464584
Resposta escolhida
Fico contente de ver que você está se aventurando às novidades e melhorando sua codificação, de verdade! Expressões regulares podem ficar bastante complexas dependendo das funcionalidade que você quer nelas. No seu caso, é muito mais simples limitar a entrada de dados, ou seja, permitir apenas uma vírgula ao digitar.
MICHAELL 06/07/2016 22:39:26
#464586
sim, eu sei..
mas queria realmente fazer isso em expressão regular

só falta realmente saber como liberar apenas uma virgula...e as outras tirar
KERPLUNK 06/07/2016 22:58:21
#464587
Bem, ok, nesse caso, você terá que usar uma feature chamada [Ô]Negative look ahead[Ô], ficando assim:

Regex.Replace(campo, @[Ô]\s*,\s*(?!\d)[Ô], [Ô][Ô]);


Como eu disse, expressões regulares são bem complexas e às vezes bastante confusas, um bom lugar para entender bem é aqui
MICHAELL 07/07/2016 00:17:36
#464591
nao funcionou Kerplunk
esta aceitando letras normalmente.. e ainda aceita virgula seguido de qualquer numero
veja em anexo um exemplo. no exemplo ele reconheceu apenas 1 virgula

o que gostaria era de deixar apenas os numero e a primeira virgula. nada mais

MICHAELL 07/07/2016 00:19:14
#464592
juro que estou tentando aqui.. mas ta dificil
KERPLUNK 07/07/2016 00:48:38
#464593
Eu disse antes para usar o replace porque tinha certeza que seria muito mais do que você estava querendo...
MICHAELL 07/07/2016 16:35:30
#464618
bom, resolvi filtrar por numeros e virgula... e deixei o try catch.
no caso, se ele colocar duas virgula.. o campo apenas ficará 0,00

  
// Formata qualquer string em Moeda
// Exemplo de uso: txtValor.Text = txtValor.Text.MaskMoeda();

public static string MaskMoeda(this string valor)
{
try
{
// Retira tudo que nao for numero e virgula. converte em double e formata em 0:C2
return string.Format([Ô]{0:C2}[Ô], Convert.ToDouble(Regex.Replace(valor, @[Ô][^\d,][Ô], [Ô][Ô])));
}
catch (Exception)
{

return [Ô]0,00[Ô];
}
}

Tópico encerrado , respostas não são mais permitidas