asp.net c#格式化数字的正则表达式验证器

时间:2017-06-05 11:38:57

标签: c# asp.net regex format

我有一个带有数值的文本框。例如,该数字是23542.56。该数字在MySQL数据库中存储为double。

我将数字转换为十进制并将其格式化为字符串,同时我使用千位分隔符加载数据库中的值... ToString(“N”)。

TextBox.Text = Convert.ToDecimal(mdr["Value"].ToString()).ToString("N");

我的正则表达式验证器只接受数字和逗号:

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox" ValidationExpression="^\d+(\,\d+$)?$" ValidationGroup="NumericValidate">Allowed Chars are: 0-9 und ,</asp:RegularExpressionValidator>

问题是Validator不接受格式化的数字,例如23.542,56。什么是让他只接受“0-9和”的正确方法,还接受千位分隔符?

提前致谢...

信息:将“28542.56”显示为“23.542,56”是德国的常用符号,这就是我用这种方式格式化数字的原因。

1 个答案:

答案 0 :(得分:3)

您不需要转义逗号,,但您必须转义点.,否则它将匹配每个字符,如.*,它匹配所有字符。< / p>

[方括号]匹配给定类中的任何字符,其中包含点.,逗号,和数字。< / p>

如果你想更加严格并且有三胞胎,你必须这样做:

  thousands v          v literal comma
^\d{1,3}(?:\.\d{3})*(?:,\d*)?$
         ^           ^ non-capturing-groups

这仍然会将格式错误的数字与前导零0匹配,例如:

00
01
003.999,99

也有一种非常简单的方法可以排除这些。我留给你作为家庭作业:) 提示:[1-9]

编辑:仅接受1 1,11 1.111 1.111,11 1111,11

正则表达式应该是:

^1+(?:\.111)*(?:,11)?$

对于某些角落情况可能会略有不同,但基本上就是这样。