正则表达式在C#中用于带小数点的数字&逗号

时间:2013-06-13 04:46:20

标签: c# regex

我需要在文本框中输入金额,该文本框允许带小数点和逗号的数字。 这是什么正则表达式?

我使用了下面的

txtInitialAmountGuarDetails.ValidationSettings.RegularExpression.ValidationExpression = @"^[-+]?\d*[0-9](|.\d*[0-9])(|,\d*[0-9])?$";

但它不适用于像300,000,000,000,000这样的大数字。

5 个答案:

答案 0 :(得分:7)

逐步建立起来。鉴于美国语言环境,具有这些规则的数字按顺序排列:

  • 字符串开头:^
  • 可选标志:[+-]?
  • 最多3位数:\d{1,3}
  • 逗号后跟3位数,重复任意次:(?:,\d{3})*
  • 可选的小数点和小数部分:(?:[.]\d+)?
  • 字符串结束:$

您对小数点后的位数有限制吗?然后将最后一个加号更改为{2} 2位数。

所以,正则表达式是:

@"^[+-]?\d{1,3}(?:,\d{3})*(?:[.]\d+)?$"

或者,如果您想解释您的工作,请使用x选项并:

@"(?x)            # Extended format.
  ^[+-]?          # Optional sign.
  \d{1,3}         # Initial 1-3 digits.
  (?:,\d{3})*     # Any number of commas followed by 3 digits.
  (?:[.]\d+)?$"   # An optional decimal point followed by any number of digits.

但C#是否已经拥有与语言环境相关的验证器?

答案 1 :(得分:1)

我没有运行它,但你可以尝试一下。

var regexp =/^\s*?([\d\,]+(\.\d{1,2})?|\.\d{1,2})\s*$/;

答案 2 :(得分:1)

这有效:\d{1,3}(,\d{3})*\.{0,1}(\d{3},)*\d{0,3}

至于逗号问题之后,任何选择都应该没问题。如果你用逗号,我的正则表达式工作。如果你做5位数,那么空格只需用(\d{5}\s{1})*\d{0,5}替换结尾。当然,如果你只是在小数点后使用任何分隔符,你只需要\d*

答案 3 :(得分:1)

你也可以试试这个正则表达式:

^([+-]?\d{1,3}(?:,\d{1,3})*(?:\.\d+)*)$

请记住.在正则表达式引擎中具有特定含义,因此有必要将其转义。

我还建议您不要使用正则表达式来完成此任务,而是查看masked textbox

答案 4 :(得分:-1)

试试这个:

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

如果需要任何改进,请告诉我......