Java email validation using regex

This commit is contained in:
javadevjournal
2020-11-28 12:47:37 -08:00
parent bed8a6e219
commit 8475fb461f
14 changed files with 402 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4" />

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.javadevjournal</groupId>
<artifactId>email-validation-regex</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.0</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,6 @@
package com.javadevjournal.regex.email;
public interface EmailValidation {
boolean validateEmailAddress(final String email);
}

View File

@@ -0,0 +1,22 @@
package com.javadevjournal.regex.email;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidationWithDomain implements EmailValidation {
private static Pattern EMAIL_REGEX= Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,12}$", Pattern.CASE_INSENSITIVE);
/**
* This email validation use the regular expression to check the email pattern.
* It also check the length of the domain name (e.g. .com , .net, .media etc). You can always modify
* the regular expression to increase the length which checking the domain name character length
* @param email
* @return
*/
@Override
public boolean validateEmailAddress(String email) {
final Matcher matcher = EMAIL_REGEX.matcher(email);
return matcher.matches();
}
}

View File

@@ -0,0 +1,21 @@
package com.javadevjournal.regex.email;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidationWithDoubleDots implements EmailValidation {
private static Pattern EMAIL_REGEX= Pattern.compile("^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+(?:\\\\.[a-zA-Z0-9_!#$%&'*+/=?`{|}~^-]+)*@[a-zA-Z0-9-]+(?:\\\\.[a-zA-Z0-9-]+)*$");
/**
* Email validation regex to restrict leading, trailing dots. It also will check if the
* email contains consecutive dots.
* @param email
* @return
*/
@Override
public boolean validateEmailAddress(String email) {
final Matcher matcher = EMAIL_REGEX.matcher(email);
return matcher.matches();
}
}

View File

@@ -0,0 +1,21 @@
package com.javadevjournal.regex.email;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RFC5322EmailValidation implements EmailValidation {
private static Pattern EMAIL_REGEX= Pattern.compile("^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$", Pattern.CASE_INSENSITIVE);
/**
* Java regular expression to validate email using the RFC 5322. Keep in mind that it also allows
* few characters which can pause security risks (e.g. | character)
* @param email
* @return boolean
*/
@Override
public boolean validateEmailAddress(String email) {
final Matcher matcher = EMAIL_REGEX.matcher(email);
return matcher.matches();
}
}

View File

@@ -0,0 +1,26 @@
package com.javadevjournal.regex.email;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Class contains different utility methods to validate emails
*/
public class SimpleEmailValidation implements EmailValidation{
private static Pattern EMAIL_REGEX= Pattern.compile("^(.+)@(.+)$");
/**
* A simple validation which check for @ symbol and make sure there is
* some character before and after the @ symbol
* @param email
* @return
*/
@Override
public boolean validateEmailAddress(String email) {
final Matcher matcher = EMAIL_REGEX.matcher(email);
return matcher.matches();
}
}

View File

@@ -0,0 +1,15 @@
package com.javadevjournal.regex.email;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class W3CHTML5EmailValidation implements EmailValidation {
private static Pattern EMAIL_REGEX= Pattern.compile("^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$");
@Override
public boolean validateEmailAddress(String email) {
final Matcher matcher = EMAIL_REGEX.matcher(email);
return matcher.matches();
}
}

View File

@@ -0,0 +1,44 @@
package com.javadevjournal.regex.email;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class RFC5322SimpleEmailValidationTest {
@ParameterizedTest(name = "#{index} - Run test with email = {0}")
@MethodSource("validEmailList")
void valid_email_test(String email){
EmailValidation validation = new RFC5322EmailValidation();
assertTrue(validation.validateEmailAddress(email));
}
@ParameterizedTest(name = "#{index} - Run test with email = {0}")
@MethodSource("invalidEmailList")
void invalid_emails_test(String email){
EmailValidation validation = new RFC5322EmailValidation();
assertFalse(validation.validateEmailAddress(email));
}
static List<String> validEmailList(){
return Arrays.asList(
"contact@javadevjournal.com",
"contact.us@javadevjournal.com",
"contact-us+1@javadevjournal.com",
"contact?us+1@javadevjournal.com"
);
}
static List<String> invalidEmailList(){
return Arrays.asList(
"@javadevjournal.com",
"test@dummy.com"
);
}
}

View File

@@ -0,0 +1,45 @@
package com.javadevjournal.regex.email;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class SimpleEmailValidationConsecutiveDotsTest {
@ParameterizedTest
@MethodSource("validEmailList")
void valid_email_test(String email){
EmailValidation validation = new EmailValidationWithDoubleDots();
assertTrue(validation.validateEmailAddress(email));
}
@ParameterizedTest
@MethodSource("invalidEmailList")
void invalid_emails_test(String email){
EmailValidation validation = new EmailValidationWithDoubleDots();
assertFalse(validation.validateEmailAddress(email));
}
static List<String> validEmailList(){
return Arrays.asList(
"contact@javadevjournal.com",
"contact.us@javadevjournal.com",
"contact-us+1@javadevjournal.com"
);
}
static List<String> invalidEmailList(){
return Arrays.asList(
".@javadevjournal.com",
"test@dummy.com.",
"contact@javadevjournal..com"
);
}
}

View File

@@ -0,0 +1,46 @@
package com.javadevjournal.regex.email;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class SimpleEmailValidationNonLatinTest {
@ParameterizedTest
@MethodSource("validEmailList")
void validate_email(String email){
SimpleEmailValidation validation = new SimpleEmailValidation();
// assertTrue(validation.validateNonLatinEamil(email));
}
@ParameterizedTest
@MethodSource("invalidEmailList")
void invalid_emails(String email){
SimpleEmailValidation validation = new SimpleEmailValidation();
// assertTrue(validation.validateNonLatinEamil(email));
}
static List<String> validEmailList(){
return Arrays.asList(
"contact@javadevjournal.com",
"contact.us@javadevjournal.com",
"contact-us+1@javadevjournal.com",
"test@tüller.com"
);
}
static List<String> invalidEmailList(){
return Arrays.asList(
"contact.us#javadevjournal.com",
"@javadevjournal.com",
"test@test.corporate",
"test@tüller.com"
);
}
}

View File

@@ -0,0 +1,46 @@
package com.javadevjournal.regex.email;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class SimpleEmailValidationWithDomainTest {
@ParameterizedTest(name = "#{index} - Test with email = {0}")
@MethodSource("validEmailList")
void validate_email_test(String email){
EmailValidation validation = new EmailValidationWithDomain();
assertTrue(validation.validateEmailAddress(email));
}
@ParameterizedTest(name = "#{index} - Test with email = {0}")
@MethodSource("invalidEmailList")
void invalid_emails_test(String email){
EmailValidation validation = new EmailValidationWithDomain();
assertFalse(validation.validateEmailAddress(email));
}
static List<String> validEmailList(){
return Arrays.asList(
"contact@javadevjournal.com",
"contact.us@javadevjournal.com",
"contact-us+1@javadevjournal.com",
"test@javadevjournal.media.org",
"test@test.corporations"
);
}
static List<String> invalidEmailList(){
return Arrays.asList(
"contact.us#javadevjournal.com",
"@javadevjournal.com"
);
}
}

View File

@@ -0,0 +1,30 @@
package com.javadevjournal.regex.email;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class SimpleSimpleEmailValidationTest {
private static final Logger LOG = LogManager.getLogger(SimpleSimpleEmailValidationTest.class);
@DisplayName("Validate email using simple regex")
@ParameterizedTest
@ValueSource(strings = {"contact-us@javadevjournal.com",
"contact@javadevjournal.com",
"contact.us@javadevjournal.com",
"contact-us+1@javadevjournal.com",
//invalid emails
"contact.us#javadevjournal.com",
"@javadevjournal.com",
"test@test.corporate"
})
void validate_email_simpleRegex(String email){
SimpleEmailValidation validation = new SimpleEmailValidation();
assertTrue(validation.validateEmailAddress(email));
}
}

View File

@@ -0,0 +1,47 @@
package com.javadevjournal.regex.email;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class W3CHTML5EmailValidationTest {
@ParameterizedTest(name = "#{index} - Run test with email = {0}")
@MethodSource("validEmailList")
void valid_email_test(String email){
EmailValidation validation = new W3CHTML5EmailValidation();
assertTrue(validation.validateEmailAddress(email));
}
@ParameterizedTest(name = "#{index} - Run test with email = {0}")
@MethodSource("invalidEmailList")
void invalid_emails_test(String email){
EmailValidation validation = new W3CHTML5EmailValidation();
assertFalse(validation.validateEmailAddress(email));
}
static List<String> validEmailList(){
return Arrays.asList(
"contact@javadevjournal.com",
"contact.us@javadevjournal.com",
"contact-us+1@javadevjournal.com",
"contact?us+1@javadevjournal.com"
);
}
static List<String> invalidEmailList(){
return Arrays.asList(
"@javadevjournal.com",
"@javadevjournal..com",
"test@dummy.com",
"test@test.corporations",
"test@126.1.1.1"
);
}
}