Regex 使用组合正则表达式进行密码检查

Regex 使用组合正则表达式进行密码检查,regex,laravel,passwords,Regex,Laravel,Passwords,在Laravel中,我必须对密码进行严格的安全检查。 我对Regex没有任何先验知识,但我认为这是我的最佳解决方案,我相信它可以满足我的需要。以下是我客户的规则: 密码必须包含所有4个字符的类型: 小写:a-z 大写:A-Z 数字:0-9 特殊字符:!“#$%&'()*+,-./:;?@[\]^{124} 您的用户名、名字或姓氏不应包含在密码中 不得使用相同字符的连续集(AAAAA…,1111111…) 通过搜索Stackoverflow,我发现了一个类似的解决方案,它处理前4条规则,但经过

在Laravel中,我必须对密码进行严格的安全检查。 我对Regex没有任何先验知识,但我认为这是我的最佳解决方案,我相信它可以满足我的需要。以下是我客户的规则:

密码必须包含所有4个字符的类型:

  • 小写:a-z
  • 大写:A-Z
  • 数字:0-9
  • 特殊字符:!“#$%&'()*+,-./:;<=>?@[\]^{124}
  • 您的用户名、名字或姓氏不应包含在密码中
  • 不得使用相同字符的连续集(AAAAA…,1111111…)
通过搜索Stackoverflow,我发现了一个类似的解决方案,它处理前4条规则,但经过必要的修改:

/^.*(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!"#$%&'()*+,-.\/:;<=>?@[\]^_`{|}~]).*$/
关于“名称不能成为密码的一部分”规则,由于我们必须向它传递一个或多个字符串参数,所以甚至可以在正则表达式中这样做吗

无论如何,我希望所有规则都有一个正则表达式。因为这可能是不可行的,除了关于“不允许用户名”的部分之外,是否有可能对所有规则都至少有一个正则表达式?然后我可以对特定规则进行自定义验证


我不认为我的问题是重复的,因为它是至少两个问题的组合。给定“重复”只是我正则表达式的一部分,我不知道如何与另一个问题组合。

一个选项是添加一个否定的前瞻,断言输入的密码中没有两个连续字符出现:

/^(?!.*(.)\1)(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!"#$%&'()*+,-.\/:;<=>?@[\]^_`{|}~]).*$/
   ^^^^^^^
/^(?。*()\1)(?=.[a-zA-Z])(?=.[0-9])(?=.[!”、-.\/:;?@[\]^{124}])*$/
^^^^^^^
请注意,您在模式开始时使用的
*
可能放错了位置。您不需要/不希望它出现在那里,因为您希望在开始匹配实际密码之前启动lookaheads


太棒了!我只是对它做了一点修改,因为我想我必须指定允许重复的字符数(在您的示例中,“!Testt”已经不允许),所以它将是这样的:
/^(?。*()\1{5,})(?=.[a-zA-Z])(?=.[0-9])(?=.[!“\$%&'()*+,-。/:;?@[\]^^{{124}].*$/
接受了。我也意识到我的正则表达式没有同时要求小写和大写,只有一个。所以我的最终正则表达式应该是:
/^(?)(.*)\1{5,})(?=.[a-z])(?=.[a-z])(?=.[!“\$%&'(*+,-.\/:;?[\]^{{124}])。$/.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
/^(?!.*(.)\1)(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!"#$%&'()*+,-.\/:;<=>?@[\]^_`{|}~]).*$/
   ^^^^^^^