2

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

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

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

有任何想法吗?

4

5 回答 5

3

扭转问题:一个字符后面最多可以跟 3 个相同的字符。然后它必须跟随其他东西。最后,整个字符串必须由这样的序列组成。在 perl 风格中:

^((.)\2{0,3}(?!\2))*$
于 2011-01-21T02:09:40.293 回答
2

你需要把.* 里面的前瞻:

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

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

我在前瞻中使用了非贪婪星,因为它看起来更合适,但贪婪也会起作用——它只需要前瞻内。

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

于 2011-02-12T13:41:37.567 回答
0

我将简单^(.)(?!\1\1){8,}$用于 8 个或更多字符,该字符没有任何重复超过两次的字符。

于 2011-08-15T22:27:29.933 回答
0

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

(.).*(\1{3,})
于 2019-01-23T03:36:16.297 回答
0

我认为,使用这个正则表达式.*(.).*\1+.*来匹配现有的重复字符。但是四个,取决于你。

祝你好运!

于 2016-03-19T10:07:33.830 回答