在阅读有关导致ASP.NET抱怨危险输入的原因的ASP.NET request validation causes: is there a list?帖后,我决定编写自己的正则表达式,以便在RegularExpressionValidator中使用。
我创建了一个正则表达式,用于测试Travis接受的答案中的第2点和第3点......
- 2 - 如果
&
字符位于&#
序列中(例如 
表示非破坏空格),则为“危险字符串”。- 3 - 如果
<
字符属于<x
(其中“x”是任何字母字符az),<!
,</
或{{1} },这是一个“危险的字符串。”
^(。)(&安培;#)+ |(小于[!?A-ZA-Z / \])(。)+ $
使用regexlib.com上的测试仪似乎很有效,因为它匹配了你所期望的所有东西,而不是你想要的东西。
但是当我在ASP.NET RegularExpressionValidator上使用表达式时,验证器会触发任何文本!它在Firefox或IE上也是如此,并且EnableClientScript是真还是假。我正在使用.NET 4.5.1,但我不认为这有任何区别。 任何想法为什么以及如何解决它或为什么它不起作用?
答案 0 :(得分:2)
我没有研究过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!/\?])+.*$
答案 1 :(得分:0)
我认为这就是你要找的东西:
&#[!?a-zA-Z/]+
虽然,我无法理解你的问题,所以我可能需要进行一些修正。