【Java】正規表現 [3] 数字/文字の出現回数を数える ~Matcher.find() ~

はじめに

 * パスワードの強度を測るのに、数字/文字の出現回数を数えることがある
   それを正規表現を使って実現する

サンプル

NumericCountValidator.java

/** Rule:数字がX個あるか */
public class NumericCountValidator extends RuleAbstract {

  public static void main(String[] args) {
    NumericValidator validator = new NumericValidator();
    validator.setNumber(2); // 数字が2個あるか

    System.out.println("eww9skdh3ks0ewke : " + validator.isValid("eww9skdh3ks0ewke")); // OK(数字3個)
    System.out.println("8w9skdhewke : " + validator.isValid("8w9skdhewke")); // OK(数字2個)
    System.out.println("eww9skdhewke : " + validator.isValid("eww9skdhewke")); // NG(数字1個)
    System.out.println("sisuskkdhewke : " + validator.isValid("sisuskkdhewke")); // NG(数字0個)
  }

  /** 数字がX個ある */
  private int number;

  /**
   * @param number
   *          the number to set
   */
  public void setNumber(int number) {
    this.number = number;
  }

  public boolean isValid(String targetValue) {
    return this.isValid(targetValue, "[0-9]+", this.number);
  }

  private boolean isValid(String targetValue, String regex, int number) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(targetValue);

    int count = 0;
    while (matcher.find()) {
      count++;
      if (count >= number) {
        return true;
      }
    }

    return false;
  }
}

出力結果

eww9skdh3ks0ewke : true
8w9skdhewke : true
eww9skdhewke : false
sisuskkdhewke : false