正则表达式 - 避免重复相同字母的序列

时间:2014-11-04 11:54:19

标签: php regex

我正在尝试检查用户插入的密码,在PHP网站上工作。 我的支票要:

  • 至少8个字符
  • 最多20个字符
  • 接受字母,数字和常见的特殊字符,例如(点)@ + $ - _!

在此之前我已经能够找到正确的表达式,但现在我想添加另一条规则,其中用户不能写出超过1次的相同字母序列。

假设不考虑重复两次相同的字母,如果用户写入相同的字符串(等于或多于3个字符),则应该匹配。

例如:

  • abcde 无效 - 应至少为8个字符
  • abcde1234 有效
  • abcd1abcd1 由于重复字符串abcd1无效

更多示例(更新):

  • abababab 无效 - 字符串“ab”被重播2次或更多
  • aaaaaaaa 无效 - 字符串aaa被重播多次
  • helloworld 有效 - 即使有两次重复的字母“l”

有什么建议吗? 我不知道是否可以写下正确的RegExp,也许我正在尝试做一些不可能的事情。
在离开这个想法之前,我很想检查一下在RegExp中了解我的人的意见 提前致谢

1 个答案:

答案 0 :(得分:1)

^(?!.*?(.+)\1)([\w@+$!.-]+){8,20}$

似乎运作良好:http://regex101.com/r/cU9lD0/1

棘手的部分是^(?!.*?(.+)\1),它读取"输入的开始,当没有后跟:某些东西,然后是一些子串,然后又是子串再次#34;。

话虽如此,所有"密码验证"是一个毫无意义的企业,实际上阻止人们使用really good passwords