Pergunta

O que é uma expressão regular adequado para C # que vai validar um número se ele corresponde ao seguinte?

 $1,000,000.150
 $10000000.199
 $10000 
 1,000,000.150
 100000.123
 10000

ou os equivalentes negativos?

Foi útil?

Solução

Você pode usar regex de csmba se você fizer uma ligeira modificação a ele.

^\$?(\d{1,3},?(\d{3},?)*\d{3}(.\d{0,3})?|\d{1,3}(.\d{2})?)$

Outras dicas

Eu acho ssg é certo. Não é realmente um bom uso de Regex, especialmente se o seu software tem de lidar com a entrada de dados centric não-US.

Por exemplo, se o símbolo da moeda é o euro ou o iene japonês ou a libra esterlina qualquer um dos outros símbolos dúzia de moeda lá fora?

E sobre regras de formatação número?

Nos EUA você deve digitar 1,000,000.00 mas na França, este deve ser 1.000.000,00. Outros países Permitir espaçamento entre dígitos-agrupamento ...

Se você usar um Regex reta sem tomar o Cultura em conta, então você nunca vai para validar com sucesso a menos que você está 100% certo que seu software nunca vai ser usado em um contexto centric não-US.

^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{1,3})?|\d{1,3}(\.\d{2})?)$

Eu acho que encontrei um problema com solução de SSG (ou talvez um bug MS!).

A execução deste:

float.TryParse("0,2",NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"), out num)

Retorna verdadeiro. Certamente "0,2" não é um valor de moeda válido?

Tenha cuidado com flutuadores. Eventualmente, você vai bater um caso como 0,01 representada como 0,00999999. Strings ou inteiros são melhores para uso.

Tente este. Ele pode precisar de algum ajuste fino para permitir que apenas por um único ponto decimal, mas coincide com seus casos de teste. Espero que isso ajude.

[$\d,.]+

Use esta expressão regular para moeda dos EUA \ $ (\ D) * \ d Jogos US $ 300, $ 12900 Non-Match $ 12900,00

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top