正则表达式“不包含四个或更多重复字符”

时间:2011-01-21 01:45:00

标签: regex regex-negation

我对正则表达式的体验是有限的,我一直在阅读关于否定和否定前瞻等的各种教程和帖子,但似乎没有什么能比得上我的情况。

我正在尝试在ASP.NET MVC3中为密码复杂性创建一个属性。部分验证包括最少数量的重复字符。对于当前项目,限制为3,但我想概括它。

最初,我使用@"(.)\1{3,}"来测试4个或更多重复字符,然后否定该结果。我现在不能这样做,因为我需要创建一个ModelClientValidationRegexRule对象,它只能用于积极的结果。因此,否定必须在正则表达式内部完成。我尝试使用否定前瞻的每一种方式都失败了,例如@".*(?!(.)\1{3,})"

有什么想法吗?

5 个答案:

答案 0 :(得分:3)

解决问题:一个角色最多可以跟3个相同。然后必须跟着别的东西。最后,整个字符串必须包含这样的序列。在perl风味:

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

答案 1 :(得分:2)

您需要将.* 放在中:

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

你正在这样做,.*消耗整个字符串,然后前瞻断言在字符串结尾之后没有四个相同的字符,这当然是真的。

我在前瞻中使用了一个非贪婪的明星,因为它似乎更合适,但贪婪也会起作用 - 它必须是里面前瞻。

我认为这只是几个前瞻中的一个,这是在正则表达式中验证密码强度的常用技术。顺便说一句,虽然 regex-negation 是合适的,但如果您使用了 regex 标签,那么您可以更快地获得对问题的更多回复。

答案 2 :(得分:0)

我使用简单^(.)(?!\1\1){8,}$表示8个或更多字符没有任何重复两次以上的字符。

答案 3 :(得分:0)

我认为,使用此正则表达式.*(.).*\1+.*来匹配存在的重复字符。但对于四个人来说,取决于你。

祝你好运!

答案 4 :(得分:0)

在组中找到字符,然后重复匹配

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