如果我有一组像“abcdefghij”这样的字符并使用这个字符,我会使用这个字符随机生成一个密码。生成的密码可以具有例如6个字符。如何使用正则表达式验证密码,以便相邻字符不相同,并且字符不会重复两次?
答案 0 :(得分:3)
您可以使用以下内容:
/^
(?:(.)
(?!\1) # neighbor characters are not identical
(?!(?>.*?\1){2}) # character does not occur more than twice
)*
\z/x
Perl引用,如果不支持,可以删除原子组。
在Java正则表达式中,它可以写成:
^(?:(.)(?!\1|(?:.*?\1){2}))*\z
答案 1 :(得分:-2)
AFAIK,这不能通过一个简单的正则表达式来完成(特别是确保一个字母最多只出现两次。你可以做一堆像
这样的表达式[^a]*(a[^a]*(a[^a]*))
[^b]*(b[^b]*(b[^b]*))
....
并且(匹配意味着验证失败):
[^a]*aa[^a]*
[^b]*bb[^b]*
但显然这不是个好主意。
字符不会一起重复的条件也许可以用捕获组来处理,但我几乎可以肯定另一个不能用正则表达式进行检查。
顺便说一句......为什么对正则表达式的痴迷?编程这些检查是微不足道的,正则表达式在一组案例中很有用,但不是每个检查都可以用正则表达式完成。