1

如何编写正则表达式(使用 C#)来检查是否没有字符“<”和“>”?

我在控制台上写了代码进行测试:

Regex reg = new Regex(@"^(?!(.*<+.*)|(.*>+.*))");
string[] array = { "any text", "$baks> fgg", "att <br /> dfsdf", "<<script />> sdfsdf", "@##%%^^&&" };
foreach (var str in array)
{
    if (reg.IsMatch(str))
         Console.WriteLine("OK:\t\t{0}", str);
    else
         Console.WriteLine("XSS ATTACK:\t{0}", str);
}

结果是:

OK:             any text
XSS ATTACK:     $baks> fgg
XSS ATTACK:     att <br /> dfsdf
XSS ATTACK:     <<script />> sdfsdf
OK:             @##%%^^&&

但是如果我使用这个表达式来验证属性,比如

[RegularExpression(@"^(?!(.*<+.*)|(.*>+.*))")]

它会触发任何单词。为什么?如何写出正确的表达方式?

这只是对客户端的简单验证。使用 AntiXSS 在服务器端实现全面验证。

谢谢你。

4

1 回答 1

2

客户端 RegularExpressionValidator 使用 Javascript 来执行验证。Javascript 正则表达式不理解“高级”功能,例如(?! ... )

尝试将其作为整个表达式:[^<>]*,表示除<and之外的所有内容>

Also note that the RegexValidator acts as if the expression is always 'anchored' with ^ and $.

于 2012-07-19T12:23:58.730 回答