【问题标题】:Validation order with filter带过滤器的验证顺序
【发布时间】:2015-06-11 07:51:58
【问题描述】:

我有以下代码:

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!,效果会很好。但是,如果我输入!G2G@5 之类的内容,则会设置match=false。由于该字段需要包含字母、数字和非数字字符,但它应该能够以任何顺序排列它们。我该怎么做?

【问题讨论】:

  • 我建议不要使用一个正则表达式。请尝试其中的 3 个。
  • 您希望允许的可能值是什么?我应该能够给你一个准确的正则表达式,但我需要知道你想要允许什么。例如,您当前的正则表达式仅允许在密码末尾使用通配符。所以拒绝中间有通配符的密码是正确的。
  • 我希望它能够验证,只要它在密码它将被接受,否则我不希望它被接受。 @Ractoc
  • 我还希望在其中的任何位置都允许对每种类型进行多次重复。例如 P@ssW0rd360!

标签: java swing filter


【解决方案1】:

所以我做了一些进一步的研究,发现"((?=.*\\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 个字符

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多