密码表达式未按预期工作

Password expression is not working as expected

I have a password expression like below.

它必须允许一个小写字母、一个大写字母、一个数字或一个小写字母、一个大写字母、一个特殊字符或一个小写字母、一个大写字母、一个数字、一个特殊字符。我加入了所有三个条件使用 |要么。它应最少 8 个字符,最多 20 个字符。它应该只允许特定的特殊字符 $@#!%。但是这里它允许所有特殊字符,尽管我提到了特定的集合。这是主要问题。我花了很多时间来改变模式,但仍然允许所有特殊字符。 –

I don't understand why its allowing ^ (Marr1234^)?

(((?=.\d)(?=.[a-z])(?=.[A-Z])(?=.[$@#!%]))|((?=.[a-z])(?=.[A-Z])(?=. [$@#!%]))|((?=.\d)(?=.[a-z])(?=.[A-Z])) ).{8,20}

Any ideas

您是否考虑过 .{8,20} 匹配您的输入?该术语匹配每个字符(.==每个字符)8 次最多 20 次...所以这也匹配 ^-字符

感谢 rdmuller 的帮助。我能够修复它。 我需要添加范围 [A-Za-z0-9] 并避免使用“.”像 .{8,20}.

这是我使用的表达方式

^(?=.\d)(?=.[a-z])(?=.*[A-Z])[A-Za-z0-9]{ 8,20}$