C# 正则表达式只允许数字字符加上符号、点和E

C# 正则表达式只允许数字字符加上符号、点和E,c#,regex,string,C#,Regex,String,我有一个只接受数字的文本框(它们可以是简单的int或float,功率因数为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! 为什么要使用正则表达式呢 float f; b

我有一个只接受数字的文本框(它们可以是简单的
int
float
,功率因数为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!
为什么要使用正则表达式呢

float f;
bool isNumber = Single.TryParse(textbox.Text, out f);
为什么要使用正则表达式呢

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

如果希望使用指数,请尝试以下操作(请确保使用System.Globalization;)添加


如果希望使用指数,请尝试以下操作(请确保使用System.Globalization;
)添加


也许你可以用decimal.TryParse()来代替regex,也许你可以用decimal.TryParse()来代替regex,我同意这个解决方案,构造一个带有“可以由…组成,但只能按…和…的顺序”的正则表达式会很快卷积起来。正确的重载是提供IFormatProvider的重载,更重要的是,NumberStyles(在本例中为NumberStyles.Float)我的心在正确的位置;)。Lukazoid在另一个答案中答对了+1对他来说。我同意这个解决方案,构造一个带有“可以由…组成,但只能按这个顺序..还有..”的正则表达式会很快变得复杂起来。-1表示实际上不正确。正确的重载是提供IFormatProvider的重载,更重要的是,NumberStyles(在本例中为NumberStyles.Float)我的心在正确的位置;)。Lukazoid在另一个答案中答对了+1对他来说。如果你使用
.TryParse()
而不是你自己的try/catch blockAh是的,我看不到
TryParse
的过载,它使用了
NumberStyles
,但是我现在发现了它,会适当地更新我的答案:)“E”听起来不像是一个有效的数值?你想通过输入“E”来实现什么?有些用户喜欢输入
1000000
作为
10E6
…我可以用try/catch来解决这个问题…但是你的代码看起来不错,我不想破坏它:实际上它可以工作,但是如果文本框为空,用户输入了E,它就会抛出exeption。我设法把它修好了。萨克斯!如果您使用
.TryParse()
而不是自己的try/catch blockAh是的,我看不到
TryParse
的重载,它使用了
NumberStyles
,但是我现在发现了它,将适当地更新我的答案:)“E”听起来不像是一个有效的数值?你想通过输入“E”来实现什么?有些用户喜欢输入
1000000
作为
10E6
…我可以用try/catch来解决这个问题…但是你的代码看起来不错,我不想破坏它:实际上它可以工作,但是如果文本框为空,用户输入了E,它就会抛出exeption。我设法把它修好了。萨克斯!