Java email validation using regex
This commit is contained in:
2
Java/email-validation-regex/email-validation-regex.iml
Normal file
2
Java/email-validation-regex/email-validation-regex.iml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4" />
|
||||||
31
Java/email-validation-regex/pom.xml
Normal file
31
Java/email-validation-regex/pom.xml
Normal 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>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.javadevjournal.regex.email;
|
||||||
|
|
||||||
|
public interface EmailValidation {
|
||||||
|
|
||||||
|
boolean validateEmailAddress(final String email);
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user