我有一个带有数值的文本框。例如,该数字是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”是德国的常用符号,这就是我用这种方式格式化数字的原因。
答案 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)?$
对于某些角落情况可能会略有不同,但基本上就是这样。