0

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

我用了下面

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

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

4

5 回答 5

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# 是否已经有一个依赖于语言环境的验证器?

于 2013-06-13T05:01:46.157 回答
1

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

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

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

我还建议您不要将正则表达式用于此任务,而是查看masked textbox

于 2013-06-13T06:38:40.167 回答
1

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

至于逗号之后的问题,任何选择都应该没问题。如果你用逗号,我的正则表达式有效。如果您执行 5 位数字,则只需将空格替换为(\d{5}\s{1})*\d{0,5}. 当然,如果你只是在小数点后不使用任何分隔符,你就放\d*

于 2013-06-13T04:58:10.660 回答
1

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

var regexp =/^\s*?([\d\,]+(\.\d{1,2})?|\.\d{1,2})\s*$/;
于 2013-06-13T04:53:47.103 回答
-1

试试这个:

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

让我知道它是否需要任何增强...

于 2013-06-13T05:01:39.540 回答