看完ASP.NET request validation causes: is there a list?关于导致 ASP.NET 提示危险输入的原因的帖子我决定编写自己的正则表达式以在 RegularExpressionValidator 中使用。
我创建了一个正则表达式来测试 Travis 接受的答案中的第 2 点和第 3 点...
- 2 - If the
&
character is in a&#
sequence (e.g., 
for a non-breaking space), it's a "dangerous string."- 3 - If the
<
character is part of<x
(where "x" is any alphabetic character a-z),<!
,</
, or<?
, it's a "dangerous string."
^(.)(#)+|(<[a-zA-Z!/\?])+(.)$
在 regexlib.com 上使用测试器似乎效果很好因为它符合您的所有期望,没有您不期望的。
但是当我在 ASP.NET RegularExpressionValidator 上使用表达式时,验证器会触发任何文本!它在 Firefox 或 IE 上做同样的事情,无论 EnableClientScript 是真还是假。我使用的是 .NET 4.5.1,但我不认为这会有什么不同。 关于为什么以及如何修复它或为什么它不起作用的任何想法?
最佳答案
我没有研究 ASP.NET RegularExpressionValidator 和 regexlib.com 的解析器之间的区别,但我敢打赌你的正则表达式有问题。
当我在 regexpal.com 上尝试您的正则表达式时,它与我期望的任何内容都不匹配(也许我还没有正确理解这些要求)。
编辑
以下将匹配不包含以下字符串的字符串:
-
&#
-
<a-z
-
<!
-
</
-
<?
这里是:
^((?!(&#)|(<[a-zA-Z!/\?])).)*$
See it in action at RegexPal.com
请参阅this question有关反正则表达式的详细信息。
我的原始答案(与要求相反)
我想出了这个允许点 2
前后的任何字符或点 3
前后的任何字符
这里是:
^.*(&#)+.*$|^.*(<[a-zA-Z!/\?])+.*$
关于html - 为什么这个用于验证危险 html 的 ASP.NET RegularExpressionValidator 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21477194/