簡體   English   中英

“不包含四個或更多重復字符”的正則表達式

[英]Regex for "Does not contain four or more repeated characters"

我對正則表達式的經驗有限,我一直在閱讀有關否定和否定前瞻等的各種教程和帖子,但似乎沒有什么與我的情況完全相符。

我正在嘗試在ASP.NET MVC3為密碼復雜性創建一個屬性。 部分驗證包括最少數量的重復字符。 對於當前項目,限制為 3,但我想概括一下。

最初,我使用@"(.)\\1{3,}"來測試 4 個或更多重復字符,然后否定該結果。 我現在不能這樣做,因為我需要創建一個ModelClientValidationRegexRule對象,它只會產生積極的結果。 因此,否定必須在正則表達式本身內部完成。 我嘗試使用負前瞻的每一種方式都失敗了,例如@".*(?!(.)\\1{3,})"

有任何想法嗎?

扭轉問題:一個字符最多可以跟 3 個相同的字符。 然后它必須跟着別的東西。 最后,整個字符串必須由這樣的序列組成。 在 perl 風格中:

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

您需要將.*放在前瞻中:

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

你這樣做的方式, .*消耗整個字符串,然后前瞻斷言在字符串末尾之后沒有四個相同的字符,這當然總是正確的。

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

我假設這只是幾個前瞻之一,這是在正則表達式中驗證密碼強度的常用技術。 順便說一下,雖然regex-negation是合適的,但如果你也使用了regex標簽,你會更快地得到更多對你的問題的回答。

我認為,使用這個正則表達式.*(.).*\\1+.*來匹配現有的重復字符。 但對於四個,取決於你。

祝你好運!

在組中查找字符然后匹配重復

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

我使用簡單的^(.)(?!\\1\\1){8,}$表示 8 個或更多字符,並且沒有任何重復超過兩次的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM