我的密码应该包含,
1. minimum 8 characters
2. minimum 1 special character
3. minimum 1 number
我使用以下注册表,
/^.*(?=.{8,})(?=.*d)(?=.*[A-z])(?=.*[!@#$%^&*? ]).*$/
但是这并不接受长度为8个字符的字符串AAAA2@AAAA
,有一个特殊字符 @ 并且有一个数字 2 。我对RegEx知之甚少。你能告诉我这个表达有什么问题吗?
答案 0 :(得分:3)
不接受字符串的原因是因为您忘记了d
的斜杠,而正则表达式要求字母d
位于字符串中。修复是
^(?=.{8,})(?=.*\d)(?=.*[A-Z])(?=.*[!@#$%^&*? ]).*$
^ ^^
将其与i
修饰符一起使用。 See demo
[A-z]
问题是well-known one。此外,应删除初始.*
,或正则表达式的某些部分无法正确验证。
谈到优化:长度检查几乎总是可以移到最后:
^(?=.*\d)(?=.*[A-Z])(?=.*[!@#$%^&*? ]).{8,}$
请参阅another demo(再次注意i
修饰符)。
另请参阅Fine-Tuning: Removing One Condition:
如果您必须检查
n
条件,那么您的模式最多只需要包含n-1
前瞻。通常,您甚至可以将多个条件组合到一个前瞻中。
至于您的条件如上( 1)最少8个字符,2)最少1个特殊字符,3)最少1个数字) - 没有英文字母要求< / em> - 你甚至可以使用
^(?=.*\d)(?=.*[!@#$%^&*? ]).{8,}$
答案 1 :(得分:2)
您可以使用:
^(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&*? ])[!@#$%^&*? a-zA-Z\d]{8,}$
[A-z]
不正确且匹配可能更多字符在ASCII 65-122范围内,如[
,]
,等等。