我想使用以下规则强制执行强密码:
- 一个小写字符
- 一个大写字符
- 一个数字
- 一个特殊字符
通过互联网搜索,我想出了这个:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[1-9])[a-zA-Z1-9]{8,}$
但它对 rubular.com 有帮助吗?
我想使用以下规则强制执行强密码:
- 一个小写字符
- 一个大写字符
- 一个数字
- 一个特殊字符
通过互联网搜索,我想出了这个:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[1-9])[a-zA-Z1-9]{8,}$
但它对 rubular.com 有帮助吗?
尝试这个:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9]).{8,}$
解释:
(?=.*[a-z])
密码必须在某处包含小写字母。
(?=.*[A-Z])
密码必须在某处包含一个大写字母。
(?=.*[!@#$&*])
密码必须在某处包含一个符号。
(?=.*[0-9])
密码必须在某处包含一个数字。
所有这些都是前瞻,这意味着每个测试都没有实际将其包含在匹配中或向前移动匹配位置。因此,在所有这些测试之后,就匹配而言,我们仍然处于字符串的开头。
.{8,}
整个密码必须包含 8 个或更多字符。(^
and$
锚定到字符串的开头和结尾,因此它们确保匹配包含整个字符串)。
原来的问题是[a-zA-Z1-9]{8,}
。这部分意味着整个密码必须由八个或更多的字母和数字组成。这与之前对出现特殊字符的要求相冲突。另外,原版没有把零算作一个数字,我觉得这很愚蠢。