我正在使用此正则表达式来验证文本框中的科学记数法,但它不起作用。这不允许输入任何内容。
regex = new Regex("[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?");
提前致谢。
答案 0 :(得分:2)
问题是你的正则表达式匹配空字符串。一个简单的解决方案可能是在前面添加^
,在末尾添加$
,以要求整个输入字符串与正则表达式匹配。
这是一个小测试:
var numbers = new[] {
"0", "1", "01", "+1", "-1", "+0", "-0", "1.9", "1.09", "1.90", "1e0", "1e01", "1e10"
};
var regex = new Regex("^[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?$");
var valid = numbers
.Select(n => regex.Match(n))
.Where(m => m.Success)
.Select(m => m.Value);
打印valid
中的元素将导致以下结果:
0
1
+1
-1
+0
-0
1.9
1.09
1e0
1e10
请注意01
,1.90
和1e01
的匹配程度,但我认为这是故意的。
答案 1 :(得分:0)
答案 2 :(得分:0)
这是我觉得非常有用的另一个测试人员:http://gskinner.com/RegExr/ 如果您只是想在捕获指数时匹配包含科学记数法的浮点数,那么试试这个:[ - +]?[0-9] *。?[0-9] +([eE] [ - +] [0-9] +)? (来自http://www.regular-expressions.info/floatingpoint.html)
答案 3 :(得分:0)
[-+]?(0|[1-9])[0-9]*([.][0-9]*)?([eE][-+]?(0|[1-9])[0-9]*)?
有点接近你想要的......但是如果你给出了一组你希望通过/失败的测试表,那也许会有所帮助