用于密码验证的正则表达式(正则表达式)

时间:2014-08-20 18:19:32

标签: regex passwords password-protection

满足以下密码标准的正确regex是什么:

  • 必须包含至少1封小写字母。
  • 必须至少包含1个大写字母。
  • 必须至少包含1个号码。
  • 必须至少包含1个特殊字符(仅允许使用以下特殊字符:!#%)。
  • 不得包含A-Za-z0-9!#%之外的任何其他字符(例如,不得包含;)。
  • 长度必须为8到32个字符。

这是我尝试过的,但它不起作用:

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[\!\#\@\$\%\&\/\(\)\=\?\*\-\+\-\_\.\:\;\,\]\[\{\}\^]).{8,32}

但它应该是:

^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[\!\#\@\$\%\&\/\(\)\=\?\*\-\+\-\_\.\:\;\,\]\[\{\}\^])[A-Za-z0-9!#%]{8,32}

但是Unihedron的解决方案无论如何都更好,只是想为将来会读到这个问题的用户提及这个问题。 :)

Unihedron的解决方案(也可以在下面的答案中找到,我为自己复制了它,以防万一他将其更改(更新为更好的版本)):

^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*?[!#%])[A-Za-z0-9!#%]{8,32}$

我最终得到了以下regex

^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=.*?[\!\#\@\$\%\&\/\(\)\=\?\*\-\+\-\_\.\:\;\,\]\[\{\}\^])[A-Za-z0-9\!\#\@\$\%\&\/\(\)\=\?\*\-\+\-\_\.\:\;\,\]\[\{\}\^]{8,60}$

再次感谢Unihedron和skamazin。理解!

2 个答案:

答案 0 :(得分:5)

使用此正则表达式:

/^(?=[^a-z]*[a-z])(?=[^A-Z]*[A-Z])(?=\D*\d)(?=[^!#%]*[!#%])[A-Za-z0-9!#%]{8,32}$/

这是regex demo


了解详情:

答案 1 :(得分:2)

this 上测试您的可能密码,看看他们是否能为您提供正确的结果

我使用的正则表达式是:

^(?=.*[a-z])(?=.*[A-Z])(?=.*?[0-9])(?=.*?[!#%])[A-Za-z0-9!#%]{8,32}$