我对正则表达式的体验是有限的,我一直在阅读关于否定和否定前瞻等的各种教程和帖子,但似乎没有什么能比得上我的情况。
我正在尝试在ASP.NET MVC3
中为密码复杂性创建一个属性。部分验证包括最少数量的重复字符。对于当前项目,限制为3,但我想概括它。
最初,我使用@"(.)\1{3,}"
来测试4个或更多重复字符,然后否定该结果。我现在不能这样做,因为我需要创建一个ModelClientValidationRegexRule
对象,它只能用于积极的结果。因此,否定必须在正则表达式内部完成。我尝试使用否定前瞻的每一种方式都失败了,例如@".*(?!(.)\1{3,})"
。
有什么想法吗?
答案 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,})