はじめに
* パスワードの強度を測るのに、数字/文字の出現回数を数えることがある
それを正規表現を使って実現する
サンプル
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