我正在学习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答案。 外卖:
答案 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