注册-Ex的密码验证失败
问题描述:
大家好,我的密码应当包含,注册-Ex的密码验证失败
1. minimum 8 characters
2. minimum 1 special character
3. minimum 1 number
我使用下面的REG-EX,
/^.*(?=.{8,})(?=.*d)(?=.*[A-z])(?=.*[[email protected]#$%^&*? ]).*$/
但这并不接受字符串[email protected]
这是8个字符长,具有一个特殊字符@并且具有一个数字。我对RegEx知之甚少。你能告诉我这个表达有什么问题吗?
答
原因为什么字符串不被接受是因为您忘记了d
的斜杠,并且正则表达式要求字母d
位于第e字符串。修复是
^(?=.{8,})(?=.*\d)(?=.*[A-Z])(?=.*[[email protected]#$%^&*? ]).*$
^ ^^
与i
改性剂使用它。 See demo
[A-z]
问题是well-known one。此外,应该删除最初的.*
,否则正则表达式的某些部分将无法正确验证。
而谈到优化:长度检查几乎总是可以移动到最后:
^(?=.*\d)(?=.*[A-Z])(?=.*[[email protected]#$%^&*? ]).{8,}$
见another demo(再次,注意i
修改)。
此外,见Fine-Tuning: Removing One Condition:
如果你必须检查
n
条件,你的模式只需要在包括n-1
向前看符号之最。通常情况下,您甚至可以将多个条件合并为一个预览。
而至于你的条件与上述(1)最少8个字符,2)最小的一个特殊字符,3)最低1号) - 没有英文字母要求 - 你甚至可以使用
^(?=.*\d)(?=.*[[email protected]#$%^&*? ]).{8,}$
答
您可以使用:
^(?=.*\d)(?=.*[a-zA-Z])(?=.*[[email protected]#$%^&*? ])[[email protected]#$%^&*? a-zA-Z\d]{8,}$
[A-z]
是不正确的,将ASCII内匹配可能更多的字符65-122范围内像[
,]
,`等
嗯,这将匹配'AAAA2 @ [] AA',因为'['和']'不在提供的字符类中,所以不能从问题中清楚这是否正确。 – anubhava