这是.net Regex的一个bug还是一个特性?
本文关键字:一个 bug Regex 这是 net | 更新日期: 2023-09-27 18:12:04
我正在学习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中的一个bug吗?有解决方法吗?
考虑到人们不相信我,我将展示一些我尝试过的案例:
"(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的回答。外卖:
- 在进入结论之前使用调试器; 相信微软,即使他们做的手机和浏览器很烂。(jk, WP和IE现在已经很不错了)
我发现c# Regex将"OR 1=1"部分视为布尔表达式
不,它完全忽略了它。您正在检查正则表达式是否匹配字符串:
(4,6) OR 1=1
好吧,它有!在这里:
(4,6) OR 1=1
-----
如果要验证字符串,通常需要将正则表达式锚定在字符串的开头和结尾——分别使用^
和$
——因此它只能匹配整个字符串。
String pattern = @"^'(([0-9]+ *, *)*[0-9]+')$";
我想你忘记了结束和开始字符。应该是:
"^'(([0-9]+ *, *)*[0-9]+')$"
查看这里的regex帮助:http://www.proftpd.org/docs/howto/Regex.html