我正在寻找一个适用于我们密码要求的单个正则表达式。密码应满足以下要求:
- 至少8个字符
- 不能包含空格
- 包含大小写字母
- 包含至少一个数字
- 包含至少一个特殊字符(即任何不是
0-9,a-z,A-Z
的字符)
我正在寻找一个适用于我们密码要求的单个正则表达式。密码应满足以下要求:
0-9,a-z,A-Z
的字符)编写逻辑可能会更容易。正则表达式用于匹配模式。密码往往是一些随机字符串,因此这个问题不容易通过正则表达式来解决。虽然有可能通过正则表达式解决,但是代码将变得难以理解且难以维护。
这个想法和大部分工作都来自于http://www.zorched.net/2009/05/08/password-strength-validation-with-regular-expressions/
^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])(?=\S*[\W])\S*$
我使用了他帖子底部的基本答案,但是将所有的点替换为\S
以排除空格字符,并移动了一些断言。
.*
点星号(这是不必要的,因为末尾的点星号将匹配字符串)。虽然对于这个特定的问题没有害处(你的答案是正确的并且可以正常工作),但如果密码长度有上限,则会失败。如果长度要求是8到12个字符,则正确的表达式应该是:^(?=.{8,12}$)(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*\W)\S*$
(还要注意,在lookahead中不需要\S
)。否则回答很好。 - ridgerunner