Pregunta

¿Qué es una expresión regular adecuada para C # que validará un número si coincide con lo siguiente?

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

¿O los equivalentes negativos?

¿Fue útil?

Solución

Puedes usar la expresión regular de csmba si le haces una pequeña modificación.

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

Otros consejos

Creo que ssg tiene razón. No es realmente un buen uso de Regex, especialmente si su software tiene que lidiar con el ingreso de datos no centrado en los EE. UU.

Por ejemplo, si el símbolo de moneda es el euro, el yen japonés o la libra esterlina, ¿alguna de las otras docenas de símbolos de moneda que hay por ahí?

¿Qué pasa con las reglas de formato de número?

En los EE. UU. ingresaría 1,000,000.00 pero en Francia, debería ser 1,000,000,00 . Otros países permiten el espaciado entre la agrupación de dígitos ...

Si usa un Regex directo sin tener en cuenta la Cultura, entonces nunca lo validará con éxito a menos que esté 100% seguro de que su software nunca se usará en un contexto no centrado en los Estados Unidos.

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

Creo que he encontrado un problema con la solución de ssg (o quizás un error de MS).

Ejecutando esto:

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

Devuelve true. Sin duda, " 0,2 " ¿No es un valor de moneda válido?

Ten cuidado con los flotadores. Finalmente, llegará a un caso como 0.01 representado como 0.00999999. Es mejor usar cadenas o enteros.

Prueba este. Es posible que necesite un ajuste fino para permitir solo un punto decimal, pero coincide con sus casos de prueba. Espero que esto ayude.

[$\d,.]+

Utilice esta expresión regular para moneda estadounidense \ $ (\ d) * \ d Coincide con $ 300, $ 12900 Sin partido $ 12900.00

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top