这是.NET Regex中的错误还是一个功能?

时间:2014-07-09 14:44:59

标签: c# regex .net-4.5

我正在学习C#正则表达式,我正在尝试这个:

String pattern = @"\(([0-9]+ *, *)*[0-9]+\)";
Regex reg = new Regex(pattern);
if (!reg.IsMatch(TestGroupIDs))
    throw new Exception("Invalid TestGroupIDs string in App.config. The proper format is: (4,6)");

应该验证这些字符串:"(3)""(3,4,5)""(3 ,4)""(3 , 4)"等。

我测试了这个字符串:"(4,6) OR 1=1"和正则表达式匹配。在尝试了一些其他类似的案例后,我发现.NET Regex将" OR 1=1"部分视为布尔表达式。这是.NET中的错误吗?任何解决方法?


鉴于人们不相信我,我会展示一些我尝试过的案例:

"(4,6) || 1 = 1" => A first chance exception of type 'System.NullReferenceException' occurred in DesktopMonitor.exe Incorrect syntax near '|'.

"(4,6) OR 1" => An expression of non-boolean type specified in a context where a condition is expected, near '1'.

我相信这些结果应证实我的观点。


感谢@false和@Rawling纠正我。请参阅下面的@ false&#39答案。 外卖:

  1. 在进入结论之前使用调试器;
  2. 相信微软,即使他们生产糟糕的手机和浏览器。 (jk,WP和IE现在实际上相当不错)

2 个答案:

答案 0 :(得分:8)

  

我发现C#Regex正在治疗"或1 = 1" part作为布尔表达式

不,它完全无视它。您正在检查正则表达式是否与字符串匹配:

(4,6) OR 1=1

嗯,确实如此!就在这里:

(4,6) OR 1=1
-----

如果您想验证字符串,通常需要将正则表达式锚定到字符串的开头和结尾 - 使用^$,分别 - 所以它只能匹配整个字符串。

String pattern = @"^\(([0-9]+ *, *)*[0-9]+\)$";

答案 1 :(得分:0)

我想你忘记了结尾和开始的角色。应该是:

"^\(([0-9]+ *, *)*[0-9]+\)$"

点击此处查看正则表达式帮助:http://www.proftpd.org/docs/howto/Regex.html

相关问题