我正在创建一些正则表达式代码,以便在客户尝试创建帐户时检查密码。目前,我有两段代码在测试时似乎有效: - http://www.regexplanet.com/simple/index.html。
第一位是:
^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
这可以确保:
第二部分是:
\S*(.)\1{3,}\S*
这可以确保:
匹配任何4个或更多连续相同的字符。
问题是,我如何将它们两者结合起来?我试图无济于事,但他们似乎一直很好地工作。
由于
答案 0 :(得分:1)
您可能需要考虑允许密码大于至少12个字符。帮自己一个忙,让客户受宠,并允许客户使用大于12个字符的任何大小的密码。任何低于12的东西都非常容易暴躁。
关于你的问题,我会让其他人回答这个问题。
答案 1 :(得分:1)
如果您只是将第二个正则表达式与第一个正则表达式组合在一起,那么您将要求所有密码包含四个连续相同的字符,我很确定您要禁止。试试这个:
^(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?:(.)(?!\1{3}))+$
最后一组一次捕获一个角色,每次都做一个负面的预测,以确保它不会跟随另外三个相同的角色。请注意,我从第一个正则表达式的开头删除了.*
。那从来都不属于那里,虽然之前并没有真正伤害任何事情。但是在这个正则表达式中,最后一组必须是消耗角色的唯一部分,或者它没有任何好处。
答案 2 :(得分:0)
为什么不进行两次单独的测试?上面的正则表达式模式足够复杂。将它们分开将使代码更易理解,并且还可以灵活地添加/删除其他测试,而无需触及已经工作的模式。此外,根据哪个测试失败,您可以向用户提供更详细的错误消息。