8

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

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

还是负等价物?

4

8 回答 8

14

如果您对它稍作修改,就可以使用 csmba 的正则表达式。

^\$?(\d{1,3},?(\d{3},?)*\d{3}(.\d{0,3})?|\d{1,3}(.\d{2})?)$
于 2009-03-06T06:42:21.877 回答
5

我觉得ssg是对的。正则表达式的使用并不是很好,尤其是当您的软件必须处理以非美国为中心的数据输入时。

例如,如果货币符号是欧元、日元或英镑,那么其他十几种货币符号中的哪一种?

数字格式规则呢?

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

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

于 2009-03-06T06:49:24.870 回答
3
^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{1,3})?|\d{1,3}(\.\d{2})?)$
于 2009-03-06T06:37:03.823 回答
2

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

运行这个:

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

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

于 2012-06-18T07:14:39.477 回答
1

小心浮动。最终,您将遇到一个案例,例如 0.01,表示为 0.00999999。字符串或整数更好用。

于 2009-03-06T19:19:48.530 回答
0

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

[$\d,.]+
于 2009-03-06T06:37:10.267 回答
0

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

于 2009-04-24T14:09:38.133 回答
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
于 2019-09-26T04:57:46.693 回答