diff --git a/core-java-modules/core-java-string-algorithms-3/pom.xml b/core-java-modules/core-java-string-algorithms-3/pom.xml
index c8243258c1..6d1c0b0e48 100644
--- a/core-java-modules/core-java-string-algorithms-3/pom.xml
+++ b/core-java-modules/core-java-string-algorithms-3/pom.xml
@@ -32,6 +32,11 @@
junit-jupiter
test
+
+ commons-validator
+ commons-validator
+ ${validator.version}
+
@@ -59,6 +64,7 @@
3.6.1
28.1-jre
+ 1.7
-
\ No newline at end of file
+
diff --git a/core-java-modules/core-java-string-algorithms-3/src/main/java/com/baeldung/emailvalidation/EmailValidation.java b/core-java-modules/core-java-string-algorithms-3/src/main/java/com/baeldung/emailvalidation/EmailValidation.java
new file mode 100644
index 0000000000..f80c87ea01
--- /dev/null
+++ b/core-java-modules/core-java-string-algorithms-3/src/main/java/com/baeldung/emailvalidation/EmailValidation.java
@@ -0,0 +1,12 @@
+package com.baeldung.emailvalidation;
+
+import java.util.regex.Pattern;
+
+public class EmailValidation {
+
+ public static boolean patternMatches(String emailAddress, String regexPattern) {
+ return Pattern.compile(regexPattern)
+ .matcher(emailAddress)
+ .matches();
+ }
+}
diff --git a/core-java-modules/core-java-string-algorithms-3/src/test/java/com/baeldung/emailvalidation/EmailValidationUnitTest.java b/core-java-modules/core-java-string-algorithms-3/src/test/java/com/baeldung/emailvalidation/EmailValidationUnitTest.java
new file mode 100644
index 0000000000..e6bee0ce63
--- /dev/null
+++ b/core-java-modules/core-java-string-algorithms-3/src/test/java/com/baeldung/emailvalidation/EmailValidationUnitTest.java
@@ -0,0 +1,79 @@
+package com.baeldung.emailvalidation;
+
+import static org.junit.Assert.assertTrue;
+import org.apache.commons.validator.routines.EmailValidator;
+import org.junit.Test;
+
+public class EmailValidationUnitTest {
+
+ private String emailAddress;
+ private String regexPattern;
+
+ @Test
+ public void testUsingEmailValidator() {
+ emailAddress = "username@domain.com";
+ assertTrue(EmailValidator.getInstance()
+ .isValid(emailAddress));
+ }
+
+ @Test
+ public void testUsingSimpleRegex() {
+ emailAddress = "username@domain.com";
+ regexPattern = "^(.+)@(\\S+)$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+
+ @Test
+ public void testUsingStrictRegex() {
+ emailAddress = "username@domain.com";
+ regexPattern = "^(?=.{1,64}@)[A-Za-z0-9_-]+(\\.[A-Za-z0-9_-]+)*@"
+ + "[^-][A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+
+ @Test
+ public void testUsingUnicodeRegex() {
+ emailAddress = "用户名@领域.电脑";
+ regexPattern = "^(?=.{1,64}@)[\\p{L}0-9_-]+(\\.[\\p{L}0-9_-]+)*@"
+ + "[^-][\\p{L}0-9-]+(\\.[\\p{L}0-9-]+)*(\\.[\\p{L}]{2,})$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+
+ @Test
+ public void testUsingRFC5322Regex() {
+ emailAddress = "username@domain.com";
+ regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+
+ @Test
+ public void testRestrictDots() {
+ emailAddress = "username@domain.com";
+ regexPattern = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@"
+ + "[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+
+ @Test
+ public void testOwaspValidation() {
+ emailAddress = "username@domain.com";
+ regexPattern = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+
+ @Test
+ public void testTopLevelDomain() {
+ emailAddress = "username@domain.com";
+ regexPattern = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*"
+ + "@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+
+ @Test
+ public void testGmailSpecialCase() {
+ emailAddress = "username+something@domain.com";
+ regexPattern = "^(?=.{1,64}@)[A-Za-z0-9\\+_-]+(\\.[A-Za-z0-9\\+_-]+)*@"
+ + "[^-][A-Za-z0-9\\+-]+(\\.[A-Za-z0-9\\+-]+)*(\\.[A-Za-z]{2,})$";
+ assertTrue(EmailValidation.patternMatches(emailAddress, regexPattern));
+ }
+}