2012-02-09 48 views
0

我需要檢查該字段是否包含重複字符(超過三個)。我在RegularExpressionAttribute中使用正則表達式,但它不起作用。 例如,MVC RegularExpressionAttribute。測試重複字符regexp不起作用

  • 圖案:([A-ZA-Z])\ 1 {2}
  • 輸入:abcdddf
  • 結果:沒有匹配!
在源代碼屬性

具有下面的代碼:

public override bool IsValid(object value) 
{ 
    this.SetupRegex(); 
    string str = Convert.ToString(value, CultureInfo.CurrentCulture); 
    if (string.IsNullOrEmpty(str)) 
    { 
     return true; 
    } 
    Match match = this.Regex.Match(str); 
    return ((match.Success && (match.Index == 0)) && (match.Length == str.Length)); 
} 

相反,如果串

return ((match.Success && (match.Index == 0)) && (match.Length == str.Length)); 

只有

return match.Success; 

那麼這個問題將得到解決。 是否有任何想法如何解決這個限制,而不需要實現一個自定義的RegularExpressionAttribute?可能本身就是對其他人的正規表達?

回答

1

你可以在你的正則表達式使用positive lookahead

(?=.*([a-zA-Z])\1{2}).* 

正則表達式上面的整個字符串(.*)匹配,但僅當有重複的字符字符串((?=.*([a-zA-Z]))的地方。

+0

已更新此產品,可能會收取額外費用! – user1199305 2012-02-09 12:17:45

0

問題是,只有在整個字符串由三個完全相同的字符組成時才返回true。由於您的額外檢查,驗證行爲完全像^([a-zA-Z])\1{2}$

return match.Success; 

的做法是,你應該使用一個。
或者,你也可以改變你的正則表達式是這樣的:

^.*([a-zA-Z])\1{2}.*$ 

或者,如果你想匹配那裏有重複者之間的其他字符的字符串,你可以使用這個模式:

^.*([a-zA-Z])(.*\1){2}.*$ 

編輯:
由於這個問題是關於正則表達式爲RegularExpressionAttribute,我雖然答那種忽視的事實wering,整個第一段可以忽略。

+0

謝謝你,你寫的第一個表達方式有所幫助 – user1199305 2012-02-09 12:16:57