2017-06-05 49 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