2011-01-21 25 views
2

我對正則表達式的使用經驗有限,我一直在閱讀關於否定和負向預測等的各種教程和帖子,但似乎沒有什麼比較符合我的情況。

我正試圖在ASP.NET MVC3中爲密碼複雜性創建一個屬性。驗證的一部分包括最少數量的重複字符。對於目前的項目,限制是3,但我想推廣它。「不包含四個或更多重複字符」的正則表達式

最初,我使用@"(.)\1{3,}"來測試4個或更多重複字符,然後否定該結果。我現在不能這樣做,因爲我需要創建一個ModelClientValidationRegexRule對象,該對象只能與正面結果一起使用。因此,否定必須在正則表達式本身內完成。我試圖使用負向預測的每種方式都失敗了,例如@".*(?!(.)\1{3,})"

任何想法?

回答

3

解決問題:一個字符最多可以跟3個一樣的。然後它必須跟着別的東西。最後,整個字符串必須包含像這樣的序列。在Perl中味:

^((.)\2{0,3}(?!\2))*$ 
+0

謝謝abesto。這並不奏效,但似乎非常接近。我不明白它的蝙蝠(很不正確的正則表達式),但我會看起來更接近,得到理解和修改需要。目前,當它應該是4時,它會出現5個或更多的字符失敗。我很樂意自己努力,讓它工作。 – jmcilhinney

+0

這很有趣,它似乎適用於這裏的簡單情況。請確認後發現問題,我感興趣:)無論如何,很樂意提供幫助。 – abesto

2

你需要把.*先行:

(?!.*?(.)\1{3,}) 

你這樣做的方式,.*消耗整個字符串,然後先行斷言即之後後面沒有四個相同的字符,這當然總是如此。

我在我的前瞻中使用了一個非貪心的星星,因爲它看起來更合適,但貪婪也可以工作 - 它只需在以內即可。

我假設這只是幾個lookahead中的一個,這是在正則表達式中驗證密碼強度的常用技術。順便說一句,雖然正則表達式否定是合適的,但如果您也使用了正則表達式標籤,您將會更快地獲得對您的問題的更多回復。

0

我使用簡單的^(.)(?!\1\1){8,}$作爲8個或更多的字符,沒有任何重複兩次以上的字符。

0

我想,用這個正則表達式.*(.).*\1+.*來匹配存在的重複字符。但是,四,取決於你。

祝你好運!

相關問題