In this post under Passay, I will explain with example, the purpose and how to use “CharacterCharacteristicsRule”.
“CharacterCharacteristicsRule” acts as a container of other rules and we can configure it to say that out of n rules, make sure atleast first m rules are satisfied, where m < n.
Below is the complete main class code that shows how to use it
Main class
package defaultPackage;
import org.passay.CharacterCharacteristicsRule;
import org.passay.CharacterRule;
import org.passay.EnglishCharacterData;
import org.passay.PasswordData;
import org.passay.PasswordValidator;
import org.passay.RuleResult;
public class Example23 {
public static void main(String[] args) {
CharacterRule lowerCaseAlphabeticalRule = new CharacterRule(EnglishCharacterData.LowerCase);
CharacterRule upperCaseAlphabeticalRule = new CharacterRule(EnglishCharacterData.UpperCase);
CharacterRule numericRule = new CharacterRule(EnglishCharacterData.Digit);
CharacterCharacteristicsRule characterCharacteristicsRule = new CharacterCharacteristicsRule(2, lowerCaseAlphabeticalRule, upperCaseAlphabeticalRule, numericRule);
PasswordValidator passwordValidator = new PasswordValidator(characterCharacteristicsRule);
System.out.println("CharacterCharacteristicsRule using two rules");
PasswordData passwordData = new PasswordData("aaabbb");
RuleResult ruleResult = passwordValidator.validate(passwordData);
System.out.println("aaabbb --> " + ruleResult.isValid());
passwordData = new PasswordData("90850");
ruleResult = passwordValidator.validate(passwordData);
System.out.println("90850 --> " + ruleResult.isValid());
passwordData = new PasswordData("abc_qwerty_90");
ruleResult = passwordValidator.validate(passwordData);
System.out.println("abc_qwerty_90 --> " + ruleResult.isValid());
passwordData = new PasswordData("ABC_90");
ruleResult = passwordValidator.validate(passwordData);
System.out.println("ABC_90 --> " + ruleResult.isValid());
passwordData = new PasswordData("AAABBB");
ruleResult = passwordValidator.validate(passwordData);
System.out.println("AAABBB --> " + ruleResult.isValid());
passwordData = new PasswordData("AAABBB_qwerty_90");
ruleResult = passwordValidator.validate(passwordData);
System.out.println("AAABBB_qwerty_90 --> " + ruleResult.isValid());
}
}
In the above code, I defined three rules at line 12, 13, and 14.
“lowerCaseAlphabeticalRule” makes sure that the password only contain lower case letter
“numericRule” makes sure that the password only contain number.
“upperCaseAlphabeticalRule” makes sure that the password only contain upper case letter.
At line 16, I created an instance of “CharacterCharacteristicsRule” which contains the previous three rule and it says atleast 2 out of 3 should be satisfied.
At line 17, I create an instance of “PasswordValidator” using the instance of “CharacterCharacteristicsRule”
Next I will take six different types of passwords and validate them using “PasswordValidator” instance.
In this way I can use “CharacterCharacteristicsRule”.
Below is the output for your reference
Output
CharacterCharacteristicsRule using two rules
aaabbb --> false
90850 --> false
abc_qwerty_90 --> true
ABC_90 --> true
AAABBB --> false
AAABBB_qwerty_90 --> true