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

时间:2009-03-06 06:26:58

标签: c# regex numbers currency

什么是适合C#的正则表达式,如果匹配以下内容,它将验证一个数字?

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

或负面的等价物?

8 个答案:

答案 0 :(得分:14)

如果对它进行一点修改,可以使用csmba的正则表达式。

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

答案 1 :(得分:5)

我认为ssg是对的。 它并不是真正好用的正则表达式,特别是如果你的软件必须处理非美国中心数据输入。

例如,如果货币符号是欧元,或日元或英镑,那么其他十几种货币符号是什么?

数字格式规则怎么样?

在美国,您需要输入1,000,000.00,但在法国,这应该是1.000.000,00。其他国家/地区允许数字分组之间的间距...

如果您在不考虑文化的情况下使用直接正则表达式,那么除非您100%确定您的软件永远不会在非美国中心环境中使用,否则您永远不会成功验证。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

我认为我发现ssg的解决方案存在问题(或者也许是MS错误!)。

运行此:

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

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

答案 4 :(得分:1)

小心浮子。最终你会遇到0.01表示为0.00999999的情况。字符串或整数更好用。

答案 5 :(得分:0)

试试这个。它可能需要一些微调才能允许一个小数点,但它确实符合您的测试用例。我希望这会有所帮助。

[$\d,.]+

答案 6 :(得分:0)

将此正则表达式用于美国货币 \ $(\ d)* \ d 比赛$ 300,$ 12900 不匹配$ 12900.00

答案 7 :(得分: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