From e5b8d493969786f7a0bf31bec92fd6797c3e8556 Mon Sep 17 00:00:00 2001 From: binsky Date: Sat, 5 Feb 2022 14:58:06 +0100 Subject: [PATCH] implement check for existing digit in password --- src/main/java/PasswordValidator.java | 12 ++++++++++++ src/test/java/PasswordValidatorTest.java | 16 ++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/PasswordValidator.java b/src/main/java/PasswordValidator.java index 71367da..9cb4f03 100644 --- a/src/main/java/PasswordValidator.java +++ b/src/main/java/PasswordValidator.java @@ -4,9 +4,11 @@ public class PasswordValidator { int minLength = 6; boolean requireUppercase = true; boolean requireLowercase = true; + boolean requireDigit = true; private final Pattern uppercasePattern = Pattern.compile("^(?=.*[A-Z]).+$"); private final Pattern lowercasePattern = Pattern.compile("^(?=.*[a-z]).+$"); + private final Pattern digitPattern = Pattern.compile("^(?=.*\\d).+$"); public boolean validate(String password) { if (password.length() < minLength) { @@ -15,6 +17,8 @@ public class PasswordValidator { return false; } else if (requireLowercase && !lowercasePattern.matcher(password).matches()) { return false; + } else if (requireDigit && !digitPattern.matcher(password).matches()) { + return false; } return true; } @@ -42,4 +46,12 @@ public class PasswordValidator { public void setRequireLowercase(boolean requireLowercase) { this.requireLowercase = requireLowercase; } + + public boolean isRequireDigit() { + return requireDigit; + } + + public void setRequireDigit(boolean requireDigit) { + this.requireDigit = requireDigit; + } } diff --git a/src/test/java/PasswordValidatorTest.java b/src/test/java/PasswordValidatorTest.java index 96c050d..78d9335 100644 --- a/src/test/java/PasswordValidatorTest.java +++ b/src/test/java/PasswordValidatorTest.java @@ -13,6 +13,7 @@ class PasswordValidatorTest { passwordValidator.setMinLength(6); passwordValidator.setRequireUppercase(false); passwordValidator.setRequireLowercase(false); + passwordValidator.setRequireDigit(false); assertFalse(passwordValidator.validate("abcde")); assertTrue(passwordValidator.validate("abcdef")); assertTrue(passwordValidator.validate("abcdefg")); @@ -20,6 +21,7 @@ class PasswordValidatorTest { // test uppercase requirement passwordValidator.setRequireUppercase(true); passwordValidator.setRequireLowercase(false); + passwordValidator.setRequireDigit(false); assertFalse(passwordValidator.validate("abcdef")); assertTrue(passwordValidator.validate("abCdef")); assertTrue(passwordValidator.validate("ABCDEF")); @@ -27,8 +29,22 @@ class PasswordValidatorTest { // test lowercase requirement passwordValidator.setRequireUppercase(true); passwordValidator.setRequireLowercase(true); + passwordValidator.setRequireDigit(false); assertFalse(passwordValidator.validate("abcdef")); assertTrue(passwordValidator.validate("abCdef")); assertFalse(passwordValidator.validate("ABCDEF")); + + // test digits requirement + passwordValidator.setRequireUppercase(true); + passwordValidator.setRequireLowercase(true); + passwordValidator.setRequireDigit(true); + assertFalse(passwordValidator.validate("8")); + assertFalse(passwordValidator.validate("12345678")); + assertFalse(passwordValidator.validate("abcdef")); + assertFalse(passwordValidator.validate("abcdef8")); + assertFalse(passwordValidator.validate("abCdef")); + assertFalse(passwordValidator.validate("ABCDEF")); + assertFalse(passwordValidator.validate("ABCDEF8")); + assertTrue(passwordValidator.validate("abCDE8F")); } }