繁体   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