我需要正则表达式在我的角度项目中使用它来验证密码,正则表达式必须遵守以下要求:
-6个字符。
-至少包含一个大写字母。
-一个小写字母。
-一个数字。
-没有空格
我写了以下正则表达式:
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)
这将验证至少一个数字,一个大写字母,一个小写字母,但不验证字符串的长度。
要强制用户输入特殊字符(例如6个字符):
((?=.*[a-z])(?=.*[A-Z])(?=.*\d)){6}
长度仍然无法正常工作:
Aabcd1->成功,因为6个字符,并且包含大写字母,小写字母,数字。
Aabcd->失败,因为5个字符。
Aabcd12->成功,尽管有7个字符!
我还需要防止空格。
我在这里错过了什么?
答案 0 :(得分:1)
我建议您使用单个regexen进行测试:
[0-9] // Test #1 for numbers
[A-Z] // Test #2 for uppercase
[a-z] // Test #3 for lowercase
\s // Test #4 for Whitespace, invert test result
^.{6}$ // Test #5 for length
仅在所有测试成功后才接受密码。
这似乎有些过分,但可以轻松更改PW策略,并可以轻松地以密码失败的方式向用户反馈。
此方法还允许对禁止的(sub)字符串进行相当简单的测试,例如用户名是密码的一部分。在您使用短密码的情况下,这可能不是很重要的原因,但是如果PW策略将更改,则可能更相关。
答案 1 :(得分:1)
我猜您忘了添加字符串锚点的开始和结束(分别为^
和$
)。
您的最后一个测试用例匹配,因为它不必在第六个之后考虑任何字符,并且实际上Aabcd1
与您的正则表达式匹配
尝试一下:
^((?=.*[a-z])(?=.*[A-Z])(?=.*\d)){6}.{6}$
我要做的就是添加锚点,并使用.{6}
将长度限制为6个字符。