-6

一致するパスワード検証用の正規表現を作成する必要があります

例えば。

abcdABCD1234$%^

パスワードには、少なくとも 2 つの小文字、2 つの大文字、2 つの数字、および 2 つの特殊文字を含める必要があります。しかし、彼らはこの基準以上のものを与えることができます

注 - パターンは順序付けられている必要があります。

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が1次であるため、私の要件によれば正しいです。

4

3 に答える 3

3

文字を特別な順序にする必要があるというのは、私が今まで聞いた中で最も奇妙なパスワード要件であり、あなたの顧客が本当にこれを望んでいるとは信じられません.

これを述べたので、正規表現を説明できます。

正規表現で使用している先読みアサーション(?=...)もの)は、通常、必要な文字が任意の順序である場合に使用されます。この要件が本当にない場合、正規表現は単純です。先読みをスキップするだけです。

これはあなたの要件に一致します:

String pattern="[a-z]{2,}[A-Z]{2,}[0-9]{2,}[@#$%&]{2,}";

パスワードにすべての文字、数字、およびその他のすべての文字を許可する場合に備えて、Unicode コード プロパティを使用します。

String pattern="p{Ll}{2,}p{Lu}{2,}\d{2,}[^\p{L}\d]{2,}";
于 2013-01-29T12:30:12.440 に答える
0

私はこれがあなたが望むものだと思います

(?=[a-z]{2,}).{2,}(?=[A-Z]{2,}).{2,}(?=\d{2,}).{2,}(?=[@#$%&]{2,}).{2,}

それは一致 abcdABCD1234$%^し、abABcdCD1234$%^

一致しないABababcdCD1234$%^ABac1333323@#

2 つ以上の小文字の後に 2 つ以上の大文字が続き、その後に 2 つ以上の数字が続き、その後に 2 つ以上の特殊文字が続く場合は、次のように使用します。

[a-z]{2,}[A-Z]{2,}\d{2,}[@#$%&]{2,}
于 2013-01-29T12:33:04.667 に答える
0

多分それはあなたを助けることができます:

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();
      }
}
于 2013-01-29T12:02:54.163 に答える