2012-07-19 53 views
1

如何編寫正則表達式(使用C#)來檢查是否沒有字符「<」和「>」?RegularExpression Validator每次觸發

我寫的代碼在控制檯上進行測試:

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在服務器端實現全面驗證。

謝謝。

回答

2

客戶端的RegularExpressionValidator使用Javascript來執行驗證。 Javascript-regexes不理解「高級」功能,如(?! ...)

試試這個作爲整個表達式:[^<>]*,這意味着除了<>之外的所有東西。

另請注意,RegexValidator的作用就好像表達式總是'錨定'^$

+0

謝謝!它效果很好。 幾分鐘後,我完成自定義客戶端驗證的解決方案,但您的解決方案對我來說更好。 – kleban 2012-07-19 13:30:08