【发布时间】:2016-07-08 00:39:53
【问题描述】:
我有一些正则表达式可以检查传入密码的复杂性要求。但是它不够强大,无法满足我的需求。
((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,20})
它确保密码满足最小长度,包含两种情况的字符并包含一个数字。
但是我需要修改它,以便它可以包含一个数字和/或一个允许的特殊字符。我什至得到了一个允许的特殊字符列表。
我有两个问题,分隔特殊字符并使第一个条件对数字或特殊字符进行和/或匹配。
我非常感谢一位正则表达式大神围绕这些部分提供的建议。
允许的特殊字符是:@%+\/'!#$^?:.(){}[]~-_
【问题讨论】:
-
没有例子,有点不清楚。试试
@"^(?=.*[\d@%+/'!#$^?:.(){}[\]~_-])(?=.*[a-z])(?=.*[A-Z]).{8,20}$"。我将“和/或”理解为正则表达式中的“或”。顺便说一句,没有$或\z你实际上并没有限制长度。 -
顺便说一句,您限制密码的最大长度是否有特殊原因?通常这会被认为是一个禁忌。
-
这种密码强度要求是不明智的,设置最大长度是荒谬的(如果你需要这样做,它表明你做错了哈希)。见xkcd.com/936 和crackstation.net/hashing-security.htm