2012-01-04 72 views
1

我有一個文本框應該只接受數字(它們可以是簡單的intfloat與E作爲功率因數)。正則表達式只允許數字字符加上標誌,點和E

所以一些有效的例子是:

1 
+1.1 
0 
.1 
1E-1 
1e-2 
-1.66 
-6e-10 

非有效例如:

E-1 

一般來說,應該與一個數字或+和啓動 - 標誌或一個點。

然後,我會把這個在TextChanged事件,它會沒事的。

textBox.Text = Regex.Replace(textBox.Text, @"[\d]", ""); //so useless! 
+0

也許代替正則表達式,你可以使用decimal.TryParse() – rejj 2012-01-04 12:35:17

回答

3

如果你想使用你的指數,試試這個(一定要加using System.Globalization;):

decimal value; 
if(Decimal.TryParse(textBox.Text, NumberStyles.Float, CultureInfo.CurrentCulture, out value)) 
{ 
    textBox.Text = value.ToString(); 
} 
+1

如果你使用'.TryParse()'而不是你自己的try/catch塊,這樣會更清潔 – rejj 2012-01-04 12:43:01

+0

啊,是的,我看不到'TryParse'的重載,它帶有'NumberStyles',但我發現它現在,將適當地更新我的答案:) – Lukazoid 2012-01-04 12:43:55

+0

謝謝,但如果我輸入「E」它不起作用:( – 2012-01-04 13:06:22

1

爲什麼要使用正則表達式?

float f; 
bool isNumber = Single.TryParse(textbox.Text, out f); 
+1

我同意這種解決方案,構建一個這樣的「可以由......組成但是隻按照這個順序......以及......」的正則表達式會非常快速地變得複雜。 – 2012-01-04 12:37:08

+0

-1實際上並不正確。正確的重載是提供IFormatProvider的重載,更重要的是,NumberStyles(在這種情況下,NumberStyles.Float) – rejj 2012-01-04 12:42:29

+0

以及我的心臟在正確的位置;)。 Lukazoid在其他答案中說得很對。爲他+1。 – Rotem 2012-01-04 12:45:35

相關問題