什么是C#正则表达式,它将验证货币,浮点数或整数?

问题描述 投票:8回答:8

什么是适合C#的正则表达式,如果它符合以下条件,它将验证数字?

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

或负等值?

c# regex numbers currency
8个回答
14
投票

如果您对csmba的正则表达式做一些小的修改,就可以使用它。

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

5
投票

我认为ssg是正确的。Regex并不是很好的用法,尤其是在您的软件必须处理非美国中心数据输入的情况下。

例如,如果货币符号是欧元,或者日元或英镑是其他十几种货币符号中的任何一个?

数字格式化规则呢?

在美国,您将输入1,000,000.00,但在法国,应为1.000.000,00。其他国家允许在数字分组之间留出间隔...

如果您在不考虑文化的情况下使用正则表达式,那么您将永远不会成功进行验证,除非您百分百确定您的软件永远不会在以美国为中心的环境中使用。


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

2
投票

我认为我发现ssg的解决方案有问题(或者可能是MS错误!)。

运行此:

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

返回true。当然,“ 0,2”不是有效的货币值吗?


1
投票

请注意浮子。最终,您将遇到一个案例,例如0.01,表示为0.00999999。字符串或整数最好使用。


0
投票

尝试这个。它可能需要进行一些微调,以仅允许使用一个小数点,但它确实与您的测试用例匹配。希望对您有所帮助。

[$\d,.]+

0
投票

将此正则表达式用于美元\ $(\ d)* \ d匹配$ 300,$ 12900非匹配$ 12900.00


0
投票

此正则表达式对我有用:

'^[$]{0,1}([0-9]+[,]?[0-9]+|[0-9]{1,3}([.][0-9]{3})*([,][0-9]+)?)$'

带开关

'^\${0,1}(\d+,?[0-9]+|\d{1,3}(\.\d{3})*(,\d+)?)$'

适用于

  • $ 1,000,000.150
  • 10000000.199
  • $ 10000
  • 1,000,000.150
  • 100000.123
  • 10000
© www.soinside.com 2019 - 2024. All rights reserved.