如何使用()[]括号允许密码正则表达式中的特殊字符?

时间:2017-02-20 20:35:37

标签: javascript regex

我在项目中使用以下正则表达式来表示密码字段。

/^(?=.*\d)(?=.*[~!@#$%^&*)(_+-:[}="`])(?=.*[a-z])(?=.*[A-Z]).{8,}$/

我的要求是允许至少 1大写 1小写 1号码 1特殊角色。

应该允许`〜!@#$%^& *)(_ + - :[} ="特殊字符。如果我输入其他字符则不允许。

但它允许其他字符如|\

我对正则表达不太了解。请帮帮我,我哪里出错了。??

非常感谢。

3 个答案:

答案 0 :(得分:3)

问题是在-之后的+放置在您的角色类中,该角色位于中间且表现为+0x2b和{{之间的范围1}}即:。由此可以允许此范围内的所有字符。

您可以将0x3a移动到字符类的结尾或开头,如下所示:

-

同样重要是将DOT(任何字符)最后更改为允许的字符集,如上所示。 RegEx Demo

答案 1 :(得分:2)

无论你想做什么,只想把它们放在方括号([])中,并带有帽子标志(^)

示例:

[^|][^/]

这不允许这些字符。

试试这个:

Gt%:_=yh^|\5%3f

答案 2 :(得分:2)

你需要转义特定于正则表达式的字符($,&,^,*,+,?,/,|,),(,],[,},{):

^(?=.*\d)(?=.*[\~\!\@\#\$\%\^\&\*\)\(\_\+\-\:\[\}\=\"\`])(?=.*[a-z])(?=.*[A-Z]).{8,}$

我通常只是逃避所有标点符号是安全的,但没有必要逃避#,=,:,