正则表达式不接受特定字符

时间:2015-06-12 17:37:13

标签: regex

我有以下密码正则表达式^((?=[\S]{8})(?:.*)(?=[A-Z]{1})(?:.*)(?=[\p{S}])(?:.*))$,它捕获以下标准

At least 8 chars long
At least 1 Capital Letter
At least 1 Special Character  

但是它不接受以下字符:!@#%&*()_-\/,?如何调整正则表达式以包含这些字符。以下是代码示例:https://regex101.com/r/hE2dD2/1  再次感谢

3 个答案:

答案 0 :(得分:1)

将这些字符添加到检查特殊字符的位置,并进行适当的转义:

((?=[\S]{8})(?:.*)(?=[A-Z]{1})(?:.*)(?=[\p{S}!@#%&*()_\-\\\/,?])(?:.*))$

但是,如果你不能理解正则表达式足以做出这种改变,那么其他人如何维护你的代码呢?将它作为@Michelle评论的单独的简单测试,例如: Python伪代码:

if len(password) < 8: 
    print "password too short"

elif not re.match('[A-Z]', password):
    print "Password must contain a capital letter"

elif ...

这样,你就可以找出它失败的原因并提供更有用的信息。

答案 1 :(得分:0)

您无需使用\p{S},只需使用此正则表达式:

^(?=.*?\p{Lu})(?=.*?[^\p{L}\p{N}\n])\S{8,}$

RegEx Demo

答案 2 :(得分:-1)

试试这个:

^((= [\ S] {8})(?:?)(= [AZ] {1})(?:??)(= [\ p { S}] | [^ [A-ZA-Z0-9] +])(?:*))$