^\b(?!_) # start with a word character excluding underscore
(?=\D*\d) # look ahead for a digit preceded by any non-digits
(?=[^A-Z]*[A-Z]) # look ahead for an upper preceded by any non-upper
(?=[^a-z]*[a-z]) # look ahead for a lower preceded by any non-lower
(?=.*[!{}\[\]@\#$%^&*()<>_~+\-]) # one special character preceded by any characters
.{8,15}$ # 8 to 15 characters until the end
2条答案
按热度按时间ezykj2lf1#
您可以通过简单地为密码的第一个符号指定字符类,与接下来的七到十五个符号分开:
这将排除特别列出的符号。但其他符号如
ё
将被允许。如果需要拉丁字母或数字之一,可以通过以下方式指定:
演示here。
qltillow2#
在开始时使用
\b
word boundary强制使用word character,但不包括下划线。其优点是,如果适用,正则表达式将在触发lookahead之前立即失效。此外,我建议在lookaheads中所需的字符之前使用否定(效率)。See this demo at regex101(演示中的
\n
只是为多行测试添加)- Regex在一行中: