正则表达式密码要求

Cha*_*had 3 regex

我想要求以下内容:

  • 大于七个字符.
  • 至少包含两位数字.
  • 包含至少两个特殊(非字母数字)字符.

......我想出了这个:

(?=.{6,})(?=(.*\d){2,})(?=(.*\W){2,})
Run Code Online (Sandbox Code Playgroud)

现在,我还想确保没有两个连续字符是相同的.我有点时间让它工作了.这就是我自己得到的东西:

(\S)\1+
Run Code Online (Sandbox Code Playgroud)

...但如果我试图将两者结合在一起,那就失败了.


我在应用程序的限制范围内运行.它的默认要求是1个字符长度,没有正则表达式,也没有非标准字符.

无论如何...

使用这个测试工具,我希望y90e5 $匹配,但y90e5 $ $不匹配.

我错过了什么?

Tor*_*dek 11

这是一个正则表达式的坏地方.你最好使用简单的验证.

  • 更好的是:根本不做验证.实施最小长度,**没有其他**.通过对它们施加约束来限制密码域**使它们更容易破解**,而不是更安全. (12认同)

Abe*_*bel 6

有时候我们无法影响规范并且必须编写实现,无论是什么时候,一些古老的后台系统必须通过网络连接但是对输入有一定的限制,或者只是因为你的老板要求你.

编辑:删除了基于提问者的原始正则表达式的正则表达式.

修改原始代码以适合您的描述,因为它似乎没有真正起作用:
编辑:q.然后更新以反映另一个版本.我在下面解释了一些差异:

我的版本:两个或两个以上\W,\d可以互相重复,但不能相互出现(这是我不正确的假设),我修复了长度> 7,这是一个典型的"抓住所有"更高效"表达.

 ^(?!.*((\S)\1|\s))(?=.*(\d.+){2,})(?=.*(\W.+){2,}).{8,}
Run Code Online (Sandbox Code Playgroud)

新版本在原来的问题:两个或更多的\W\d被允许彼此相邻的出现.此版本目前支持长度> = 6,而不是长度> 7,如文中所述.

当前的答案,更正,应该是这样的,它采取更新的q.,我对长度> 7的评论和优化,然后它看起来像:^(?!.*((\S)\1|\s))(?=(.*\d){2,})(?=(.*\W){2,}).{8,}.

更新:你的原始代码似乎不起作用,所以我稍微改了一下
更新:更新了答案以反映有问题的变化,不再允许空格

  • -1:一个值得他的盐的开发者不会实现一个他知道比没有它更糟糕的"功能".+1:这是OP问题的正确答案.总体而言:+0. (4认同)
  • RE'一个值得他的盐的开发者不会实现一个他知道比没有它更糟糕的"功能".真?一位客户说,"我们想要这些功能",你会告诉他没有?对于良好的密码策略存在分歧,你会失去合同吗?或者,如果是你的老板决定政策,你会愿意失去这样的工作吗?+1有勇气坚持原则; -1e6缺乏透视. (2认同)