From 72cd365b266a1a060ef8d8ad6daef2ad266bbf0c Mon Sep 17 00:00:00 2001
From: Mo Helmy <135069400+BenHelmyBen@users.noreply.github.com>
Date: Tue, 23 Jan 2024 21:21:56 +0200
Subject: [PATCH] This PR is related to BAEL-7174 (#15712)
* Update pom.xml
Add: core-java-regex-3
* This commit is related to BAEL-7174
This commit aims to add a new module named "core-java-regex-3" and a new project named "passwordvalidation" to validate passwords using regex.
* Update PasswordValidationUsingRegexUnitTest.java
Change else-if to assertTrue(matcher.matches());
---
core-java-modules/core-java-regex-3/README.md | 3 ++
core-java-modules/core-java-regex-3/pom.xml | 24 +++++++++
.../PasswordValidationUsingRegexUnitTest.java | 53 +++++++++++++++++++
core-java-modules/pom.xml | 1 +
4 files changed, 81 insertions(+)
create mode 100644 core-java-modules/core-java-regex-3/README.md
create mode 100644 core-java-modules/core-java-regex-3/pom.xml
create mode 100644 core-java-modules/core-java-regex-3/src/test/java/com/baeldung/passwordvalidation/PasswordValidationUsingRegexUnitTest.java
diff --git a/core-java-modules/core-java-regex-3/README.md b/core-java-modules/core-java-regex-3/README.md
new file mode 100644
index 0000000000..18b5f0127f
--- /dev/null
+++ b/core-java-modules/core-java-regex-3/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+
+- More articles: [[<-- prev]](/core-java-modules/core-java-regex-2)
diff --git a/core-java-modules/core-java-regex-3/pom.xml b/core-java-modules/core-java-regex-3/pom.xml
new file mode 100644
index 0000000000..143b615246
--- /dev/null
+++ b/core-java-modules/core-java-regex-3/pom.xml
@@ -0,0 +1,24 @@
+
+
+ 4.0.0
+ core-java-regex-3
+ core-java-regex-3
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.8.1
+ test
+
+
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-regex-3/src/test/java/com/baeldung/passwordvalidation/PasswordValidationUsingRegexUnitTest.java b/core-java-modules/core-java-regex-3/src/test/java/com/baeldung/passwordvalidation/PasswordValidationUsingRegexUnitTest.java
new file mode 100644
index 0000000000..b55943f1b6
--- /dev/null
+++ b/core-java-modules/core-java-regex-3/src/test/java/com/baeldung/passwordvalidation/PasswordValidationUsingRegexUnitTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.passwordvalidation;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+public class PasswordValidationUsingRegexUnitTest {
+ String password = "Baeldung20@";
+
+ @Test
+ public void givenStringPassword_whenUsingDynamicPasswordValidationRules_thenCheckIfPasswordValid() {
+ boolean result = false;
+ try {
+ if (password != null) {
+ String MIN_LENGHT = "8";
+ String MAX_LENGHT = "20";
+ boolean SPECIAL_CHAR_NEEDED = false;
+
+ String ONE_DIGIT = "(?=.*[0-9])";
+ String LOWER_CASE = "(?=.*[a-z])";
+ String UPPER_CASE = "(?=.*[A-Z])";
+ String SPECIAL_CHAR = SPECIAL_CHAR_NEEDED ? "(?=.*[@#$%^&+=])" : "";
+ String NO_SPACE = "(?=\\S+$)";
+
+ String MIN_MAX_CHAR = ".{" + MIN_LENGHT + "," + MAX_LENGHT + "}";
+ String PATTERN = ONE_DIGIT + LOWER_CASE + UPPER_CASE + SPECIAL_CHAR + NO_SPACE + MIN_MAX_CHAR;
+
+ assertTrue(password.matches(PATTERN));
+ }
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ fail("Exception occurred: " + ex.getMessage());
+ }
+ }
+
+ @Test
+ public void givenStringPassword_whenUsingRegulaExpressions_thenCheckIfPasswordValid() {
+
+
+ String regExpn =
+ "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,20}$";
+
+ Pattern pattern = Pattern.compile(regExpn, Pattern.CASE_INSENSITIVE);
+ Matcher matcher = pattern.matcher(password);
+
+ assertTrue(matcher.matches());
+ }
+
+}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index ec6c8bcb3c..569e5df9bc 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -200,6 +200,7 @@
core-java-string-operations-7
core-java-regex
core-java-regex-2
+ core-java-regex-3
core-java-uuid
core-java-collections-maps-6
core-java-records