java中使用正则表达式进行密码验证

java中使用正则表达式进行密码验证,java,regex,Java,Regex,我必须为密码验证创建一个正则表达式,它与 例如 ABCD1234$%^ 密码必须至少包含两个小写、两个大写、两个数字和两个特殊字符。但他们可以给出比这更多的标准 注意-模式应该是有序的 String pattern="(?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?=.*[0-9]{2,})(?=.*[@#$%&]{2,})"; 它对我有效,但不检查订单 方法 AB大写或任何字符不应位于AB小写之前 对你来说清楚吗 String minNum="4";

我必须为密码验证创建一个正则表达式,它与

例如

ABCD1234$%^

密码必须至少包含两个小写、两个大写、两个数字和两个特殊字符。但他们可以给出比这更多的标准

注意-模式应该是有序的

String pattern="(?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?=.*[0-9]{2,})(?=.*[@#$%&]{2,})";
它对我有效,但不检查订单 方法 AB大写或任何字符不应位于AB小写之前

对你来说清楚吗

     String minNum="4";
     String max="20";

     String REGEX="(^(?!.*(d))(?=.*[a-z]{3,})(?=.*[A-Z]{2,})(?=.*[0-9]{3,})(?=.[@#$%&*><?+]{2,})^(?!.*(#r)).{"+minNum+","+max+"})";
     //String regex="(?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?=.*[0-9]{2,})(?=.*[@#$%&]{2,})";

      String INPUT ="acABC1333323@#";

   Pattern p = Pattern.compile(REGEX);

   Matcher m = p.matcher(INPUT);

   System.out.println(m.matches());
它工作正常,但当我更改密码时
ABac1333323@;它也匹配,但根据我的要求是正确的,因为AB是一级订单。

也许它可以帮助您:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PwdValidator{

      private Matcher match;
      private Pattern pattern;
      private static final String PWD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})";

      public PwdValidator(){
          pattern = Pattern.compile(PWD_PATTERN);
      }


      public boolean validate(final String pwd){
          match = pattern.matcher(pwd);
          return match.matches();
      }
}
要求字符按特殊顺序排列是我听过的最奇怪的密码要求,我无法相信您的客户真的想要这样做

我可以向你解释你的正则表达式

这个。。。您在正则表达式中使用的东西通常会被使用,此时所需的字符可以是任意顺序。如果你真的没有这个要求,那么你的正则表达式很简单,你只需要跳过你的lookaheads

这将符合您的要求:

如果您希望允许密码中包含所有字母、数字和所有其他字符,请使用Unicode代码属性:

String pattern="p{Ll}{2,}p{Lu}{2,}\d{2,}[^\p{L}\d]{2,}";

我想这就是你想要的

(?=[a-z]{2,}).{2,}(?=[A-Z]{2,}).{2,}(?=\d{2,}).{2,}(?=[@#$%&]{2,}).{2,}
它匹配ABCD1234$%^和ABABCDD1234$%^

它与ABababcdCD1234$%^或ABAC333323不匹配@

对于两个或多个小写字母后跟两个或多个大写字母后跟两个或多个数字后跟两个或多个特殊字符,请使用:


但是他们可以给出比这更多的标准。我们如何预测您未来的需求?谢谢它对我有用。您能再次解释一下lookhead及其工作原理吗?我的答案中有一个链接,它比我能够更好地解释前瞻断言。@stema,但它与ABCD1234$%^@NaveedS不匹配,是的,但这只是因为“^”不是最后一个字符类的一部分。@stema我认为这里没有提到的字符也应该被允许使用。@SHAKILDANISH它不起作用吗?如果它起作用,请接受答案。@NaveedS,它接受“^”只是偶然的,它也会接受密码aa234134BB45$%或abcdABCD1234$%Foobar,前两个字符后面可以有任何字符。@所以您的要求是两个或更多的小写字母,后跟两个或更多的大写字母,后跟两个或更多的数字,后跟两个或更多的特殊字符,对吗?我已经准备好了答案。但我试过这个,它也能用谢谢
(?=[a-z]{2,}).{2,}(?=[A-Z]{2,}).{2,}(?=\d{2,}).{2,}(?=[@#$%&]{2,}).{2,}
[a-z]{2,}[A-Z]{2,}\d{2,}[@#$%&]{2,}