我正在尝试创建一个正则表达式来测试密码。我现在检查以下内容:
目前,用户无法输入特殊字符,但我尝试将其添加为可选检查(因此Testing1和Testing1!都应匹配)。我试过了:
^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])(A-Za-z\d[$@$!%*#?&]?){8,}$
但它并没有抓住它。我有一种感觉,我的特殊字符设置在错误的位置,但我不知道放在哪里。
我在哪里添加特殊字符列表作为可选检查?
答案 0 :(得分:3)
您可以通过多种方式设置正则表达式,例如为字符类型创建白名单或黑名单。这个特别为可以使用的角色创建了白名单,这似乎是您正在寻找的。 p>
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9$@$!%*#?&]{8,}$
正则表达式细分:
^ // Assert position at start of the line
(?=.*[A-Z]) // First positive lookahead, makes sure a capital character exists
(?=.*[a-z]) // Make sure a lowercase character exists
(?=.*[0-9]) // Make sure a number exists
[A-Za-z0-9$@$!%*#?&] // All of the possible characters that can be typed
{8,} // 8 to infinity characters
$ // Assert position at end of line
由于您说您希望将特殊字符作为可选字符,因此它们只是放在可以键入的可能字符中,但它们不会被任何正面的前瞻验证。
在regex101上查看此正则表达式。请注意,修饰符gm
可以在此示例中跨行进行验证,并且可能应在您的用例中删除。
当然,你可能有理由"白名单"方法,但一个更常见的方法,你可能想要尝试尝试的方法,是允许几乎任何东西(黑名单),然后验证是否满足某个标准。