Here is my attempt. Please note that this uses unicode categories for validation, so it is not Latin.
import java.util.regex.Pattern; public class PasswordValidator { public static void main(String[] args) { final PasswordValidator passwordValidator = new PasswordValidator(); for (String password : new String[] { "abc", "abc123", "ABC123", "abc123ABC", "!!!AAabas1", "", "22" }) { System.out.printf("Password '%s' is %s%n", password, passwordValidator.isValidPassword(password) ? "ok" : "INVALID"); } } private static final Pattern LOWER_CASE = Pattern.compile("\\p{Lu}"); private static final Pattern UPPER_CASE = Pattern.compile("\\p{Ll}"); private static final Pattern DECIMAL_DIGIT = Pattern.compile("\\p{Nd}"); public boolean isValidPassword(final String password) { return containsDigit(password) && containsLowerCase(password) && containsUpperCase(password); } private boolean containsDigit(final String str) { return DECIMAL_DIGIT.matcher(str).find(); } private boolean containsUpperCase(final String str) { return UPPER_CASE.matcher(str).find(); } private boolean containsLowerCase(final String str) { return LOWER_CASE.matcher(str).find(); } }
Here's the conclusion:
Password 'abc' is INVALID Password 'abc123' is INVALID Password 'ABC123' is INVALID Password 'abc123ABC' is ok Password '!!!AAabas1' is ok Password '' is INVALID Password '22' is ok
source share