确保密码符合以下条件
允许密码字符:
!@#$%^*()_+Aa1~`-={}[]|\:;"',.?/
我试过了:
^.*(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W])^(?!.*[&])(?=.*[!@#$%^*()_+Aa1~`\-={}[\]|\:;"',.?/])\S{8,32}$
我写了这个正则表达式,但强制执行一个不应该是这样的大写字母.......它应该接受大写,小写,数字,符号的任意三种组合:
!@#$%^*()_+Aa1~`-={}[]|\:;"',.?/
正则表达式限制限制为255个字符。任何建议对此都有帮助。
答案 0 :(得分:1)
^(?:[A-Z]()|[a-z]()|[0-9]()|[!@#$%^*()_+~`={}\[\]|\:;"',.?/-]())+$(?:\1\2\3|\1\2\4|\1\3\4|\2\3\4)
以更易阅读的形式:
^
(?:
[A-Z] () |
[a-z] () |
[0-9] () |
[!@#$%^*()_+~`={}\[\]|\\:;"',.?/-] ()
)+
$
(?:
\1\2\3 |
\1\2\4 |
\1\3\4 |
\2\3\4
)
我正在做的是使用空的捕获组作为复选框,计算在比赛过程中看到的各种角色。因此,例如,如果字符串中没有大写字母,则组#1从不参与匹配,因此\1
最终不会成功。除非所有其他三个小组都参加,否则比赛将失败。
请注意,此技术并不适用于所有风格。例如,在JavaScript中,即使该组没有参与比赛,对空组的反向引用也会成功。
答案 1 :(得分:0)
您可以使用:
^(?=.*[!@#$%^*()_+~`={}|:;"',.?\[\]\/-].*)(?=.*[A-Z].*)(?=.*[a-z].*)[\w!@#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$|
^(?=.*[!@#$%^*()_+~`={}|:;"',.?\[\]\/-].*)(?=.*\d.*)(?=.*[a-z].*)[\w!@#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$|
^(?=.*[!@#$%^*()_+~`={}|:;"',.?\[\]\/-].*)(?=.*[A-Z].*)(?=.*\d.*)[\w!@#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$|
^(?=.*\d.*)(?=.*[A-Z].*)(?=.*[a-z].*)[\w!@#$%^*()_+~`={}|:;"',.?\[\]\/-]{8,32}$
请参阅LiveDemo
如果您想要更多灵活性,可以使用它:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Dummy{
public static void main(String []args){
String password = "aaaZZZ111";
String specials = "!@#$%^*()_+~`={}|:;\"',.?\\[\\]\\/-";
String uppercase = "A-Z";
String lowercase = "a-z";
String numbers = "\\d";
String all = specials + uppercase + lowercase + numbers;
int min = 8;
int max = 32;
String regex =
"^" + lookahead(specials) + lookahead(uppercase) + lookahead(lowercase) + "[" + all + "]{"+ min +"," + max + "}$|" +
"^" + lookahead(specials) + lookahead(uppercase) + lookahead(numbers) + "[" + all + "]{"+ min +"," + max + "}$|" +
"^" + lookahead(specials) + lookahead(lowercase) + lookahead(numbers) + "[" + all + "]{"+ min +"," + max + "}$|" +
"^" + lookahead(uppercase) + lookahead(lowercase) + lookahead(numbers) + "[" + all + "]{"+ min +"," + max + "}$";
Pattern r = Pattern.compile(regex);
Matcher m = r.matcher(password);
if (m.find()) {
System.out.println("OK");
} else {
System.out.println("NO MATCH");
}
}
public static String lookahead(String input) {
return "(?=.*[" + input + "].*)";
}
}