我有一个带有数值的文本框。例如 号码是 23542.56。该数字以 double 形式存储在 MySQL 数据库中。
我将数字转换为十进制并将其格式化为字符串,同时使用 ...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>
问题是验证器不接受格式化的数字,例如 23.542,56。有什么正确的方法可以让他只接受“0-9和,”,同时也接受千位分隔符?
提前致谢...
信息:将“28542.56”显示为“23.542,56”是德国的常用符号,这就是我以这种方式格式化数字的原因。
请您参考如下方法:
你不需要转义逗号 , 但你必须转义点 .,否则它会匹配每个字符,如 .* ,匹配所有内容。
[ 方括号 ] 匹配给定类中的任何字符,其中包含点 .、逗号, 和数字。
如果你想更严格并且有三胞胎,你必须这样做:
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)?$
对于某些极端情况可能会有些不同,但基本上就是这样。
