2017-06-05 127 views
1

我有一个数值的文本框。例如,数字是23542.56。该数字在MySQL数据库中以双精度存储。asp.net c#格式化数字的正则表达式验证器

我将数字转换为十进制并将其格式化为字符串,而我从数据库中加载具有千位分隔符的值... 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> 

的问题是验证不接受格式的数字,对于exampel 23.542,56。什么是让他只接受“0-9和”的正确方法,还要接受千位分隔符?

在此先感谢...

信息:要显示“28542.56”作为“23.542,56”是在德国的通用符号,这就是为什么我这样格式化数字的原因。

+1

如果没有*精确的*输入字符串和预期的输出/行为,正则表达式问题很难回答。什么是正则表达式引擎的字符串类型? '23542.56'还是'23.542,56'?参见['^(?:\ d + | \ d {1,3}(?:[。,] \ d {3})*)(?:[,。] \ d +)?$'](http:/ /regexstorm.net/tester?p=%5e%28%3f%3a%5cd%2b%7c%5cd%7b1%2c3%7d%28%3f%3a%5b.%2c%5d%5cd%7b3%7d %29 * 29%28%%3F%3A%5B%2c中。%5D%5CD%2B%29%3F%5CR%3F%24&I = 23542.56%0D%0a23.542%2c56&O = M)。 –

+0

非常感谢 - 这种模式确切地说我正在寻找 – user1814545

回答

3

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

[方括号]比赛在给定类中的任何字符,其中包含点.,逗号,和数字。

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

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)?$ 

对于某些角落的情况可能有点不同,但基本上它是这样。

+1

感谢您的帮助和耐心! – pid

+0

有没有验证接受这些输入的方法: 1,11 1.111 1。111,11 1111,11 – user1814545

+0

请参阅编辑我的答案。 – pid