密码策略要求正则表达式

Password policy requirement regex

我需要一个正则表达式来满足此密码策略要求 最少八 (8) 个字符 至少一个数字(0-9) 以下任意三项: 小写 大写 数字 特殊字符 (!" # $ % & ' ( ) * + , - 。 / : ; < = > ? @[\]^_`{ | } ~ )

现在我正在使用这个正则表达式至少八 (8) 个字符

/^(?=.*\d)[ !#$%&()*+,.\/:;<=>?@[\]^`{|}~\w-]{8,}$/

这个正则表达式没有按预期工作,它正在接受输入 testtest1作为右match.It应该把这个test@test1,Testtest12作为右输入

您需要稍微更改一下前瞻部分。

^(?=.{8,})(?=.*[0-9].*)(.*[\!"#$%&'\(\)\*+,\-.\/:;<=>?@\[\\]^_`{|}~].*){3,}

(?=.{8,}) = 最小八个字符长度(正先行)

(?=.*[0-9].*) = 至少一个数字(正向预测)

(.*[\!"#$%&'\(\)\*+,\-.\/:;<=>?@\[\\]^_{|}~].*){3,}` 列表中某处的任何字符至少出现三次

该模式将匹配 testtest1,因为您只断言一个必需的数字,后面的字符 class [ !#$%&()*+,.\/:;<=>?@[\]^{|}~\w-]{8,}` 将重复匹配至少 8 次任何列出的。


如果您还想断言一个大写字符 A-Z 或一个特殊字符,您可以使用另一个带有 alternation

的正向先行
^(?=.*\d)(?=.*(?:[A-Z]|[!#$%&()*+,.\/:;<=>?@[\]^`{|}~-]))[!#$%&()*+,.\/:;<=>?@[\]^`{|}~\w-]{8,}$

Regex demo

注意我省略了匹配spaces,如果你想匹配它,你可以将space添加到字符class (不确定您是否允许密码中包含 spaces)