Java 带过滤器的验证顺序

Java 带过滤器的验证顺序,java,swing,filter,Java,Swing,Filter,我有以下代码: String sPassword = pssfldLoginPsw.getText(); boolean match = sPassword.matches("[a-zA-Z+]+[0-9+]+[&@!#+]+"); if (match==false) { System.out.println("Didn't Work"); } if (match==true)

我有以下代码:

String sPassword = pssfldLoginPsw.getText();
boolean match = sPassword.matches("[a-zA-Z+]+[0-9+]+[&@!#+]+");

if (match==false) 
{                            
    System.out.println("Didn't Work");                    
}

if (match==true) 
{
    System.out.println("Work"); 
} 

如果我输入
H1@
G2,这将非常有效。但是,如果我输入类似于
的内容!G2
G@5
它设置
match=false
。由于该字段需要包含字母、数字和非数字字符,但它应该能够以任何顺序包含它们。我该怎么做呢?

所以我做了一些进一步的研究,发现
“((?=.*\\d)(?=.*[a-z])(?=.*[a-z])(?=.[@$%])。{6,20}”会做我需要它做的事

String sPassword = pssfldLoginPsw.getText();
boolean match = sPassword.matches("((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})");

if (match==false) 
{                            
    System.out.println("Didn't Work");                    
}

if (match==true) 
{
    System.out.println("Work"); 
} 
(?=.*\d)
必须包含0-9之间的一位数字

(?=.[a-z])
必须包含一个小写字符

(?=.[A-Z])
必须包含一个大写字符

(?=.[@#$%])
必须在列表“@#$%”中包含一个特殊符号

将任何内容与以前的条件检查相匹配


{6,20}
长度至少6个字符,最多20个

我建议不要使用一个正则表达式。请尝试其中的3个。您希望允许的可能值是什么?我应该能够给你一个准确的regexp,但我需要知道你想允许什么。例如,当前的regexp只允许在密码末尾使用通配符。因此,在中间使用通配符拒绝密码是正确的。我希望它能够验证,只要它有一个字母(上或下一个case)、一个数字和一个非字母数字字符(或通称为通配符),它将被接受,否则,我不希望它被接受。Raccoci还希望允许每种类型的多个重复在其中的任何位置。例如P@ssW0rd360!