我试图弄清楚将执行以下操作的正则表达式模式:
任何帮助将不胜感激
应该有效的例子:
不应该起作用的例子:
答案 0 :(得分:0)
最简单的方法就是(有点天真,但应该有效,也许有更有效的方法):
([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)|
([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)|
([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)|
([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-0]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)|
([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*)|
([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*)
当然,必须根据您使用的语言将其调整为语言语法正则表达式。 在Java中:
String regex = "([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)|"
+ "([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*)|"
+ "([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)|"
+ "([a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*[0-0]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*)|"
+ "([a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*)|"
+ "([a-zA-Z0-9!$&]*[a-z]+[a-zA-Z0-9!$&]*[0-9]+[a-zA-Z0-9!$&]*[A-Z]+[a-zA-Z0-9!$&]*)";
String[] passList = new String[] { "Passw0rd", "!Passw0rd1", "Pass!w20rd", "!Passw@ord24", "password",
"Passw@rd24", "Password" };
for (String pass : passList)
{
System.out.print(pass + ": " + pass.matches(regex)+", ");
}
输出:
Passw0rd: true, !Passw0rd1: true, Pass!w20rd: true, !Passw@ord24: false, password: false, Passw@rd24: false, Password: false
答案 1 :(得分:0)
如果有多个表达式是allowey,可以使用类似(perl
语法)的内容:
if ($pw =~ /[^a-zA-Z0-9!\$&]/) {
print "Usage of not allow characters.\n";
} else {
if ($pw =~ /[a-z]/ && $pw =~ /[A-Z]/ && $pw =~ /\d/) {
print "okay\n";
} else {
print "not okay\n";
}
}
适用于上述所有示例。
答案 2 :(得分:0)
这个应该有效:
^(?=[a-zA-Z0-9!$&]*\d)(?=[a-zA-Z0-9!&$]*[a-z])(?=[a-zA-Z0-9!&$]*[A-Z])[a-zA-Z0-9!&$]+$
您还可以将+
更改为范围{4,}
或{4,50}
,以防止密码过小或/和密码过大。