2012-01-04 69 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

相关问题