Monday, 7 May 2012

Email Address Validation using Regular Expression

Email Regular Expression Pattern

^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@
[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$
Description
^   #start of the line
  [_A-Za-z0-9-]+ #  must start with string in the bracket [ ], must contains one or more (+)
  (   #  start of group #1
    \\.[_A-Za-z0-9-]+ #     follow by a dot "." and string in the bracket [ ], must contains one or more (+)
  )*   #  end of group #1, this group is optional (*)
    @   #     must contains a "@" symbol
     [A-Za-z0-9]+       #        follow by string in the bracket [ ], must contains one or more (+)
      (   #    start of group #2 - first level TLD checking
       \\.[A-Za-z0-9]+  #      follow by a dot "." and string in the bracket [ ], must contains one or more (+)
      )*  #    end of group #2, this group is optional (*)
      (   #    start of group #3 - second level TLD checking
       \\.[A-Za-z]{2,}  #      follow by a dot "." and string in the bracket [ ], with minimum length of 2
      )   #    end of group #3
$   #end of the line
 
 
 
 
Whole combination is means, email address must start with “_A-Za-z0-9-” ,
 optional follow by “.[_A-Za-z0-9-]“, and end with a “@” symbol. The 
email’s domain name must start with “A-Za-z0-9″, follow by first level 
Tld (.com, .net) “.[A-Za-z0-9]” and optional follow by a second level 
Tld (.com.au, .com.my) “\\.[A-Za-z]{2,}”, where second level Tld must 
start with a dot “.” and length must equal or more than 2 characters. 
 
 
 
 

Java Regular Expression Example

Here’s a Java example to show the use of regex to validate an email address.
 
 
package com.rainbow.regex;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class EmailValidator{
 
   private Pattern pattern;
   private Matcher matcher;
 
   private static final String EMAIL_PATTERN = 
                   "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@
                   [A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
 
   public EmailValidator(){
    pattern = Pattern.compile(EMAIL_PATTERN);
   }
 
   /**
    * Validate hex with regular expression
    * @param hex hex for validation
    * @return true valid hex, false invalid hex
    */
   public boolean validate(final String hex){
 
    matcher = pattern.matcher(hex);
    return matcher.matches();
 
   }
}
 
 
 
 
 
Here’s the unit test for above email validator.
package com.rainbow.regex;
 
import org.testng.Assert;
import org.testng.annotations.*;
 
/**
 * Email validator Testing
 * 
 *
 */
public class EmailValidatorTest {
 
 private EmailValidator emailValidator;
 
 @BeforeClass
        public void initData(){
  emailValidator = new EmailValidator();
        }
 
 @DataProvider
 public Object[][] ValidEmailProvider() {
  return new Object[][]{
   {new String[] {
      "mkyong@yahoo.com", "mkyong-100@yahoo.com",
                           "mkyong.100@yahoo.com" ,"mkyong111@mkyong.com", 
      "mkyong-100@mkyong.net","mkyong.100@mkyong.com.au",
      "mkyong@1.com", "mkyong@gmail.com.com"
              }}
   };
 }
 
 @DataProvider
 public Object[][] InvalidEmailProvider() {
  return new Object[][]{
   {new String[] {
      "mkyong","mkyong@.com.my","mkyong123@gmail.a",
      "mkyong123@.com","mkyong123@.com.com",
                           ".mkyong@mkyong.com","mkyong()*@gmail.com",
       "mkyong@%*.com", "mkyong..2002@gmail.com",
      "mkyong.@gmail.com","mkyong@mkyong@gmail.com", 
                           "mkyong@gmail.com.1a"
          }}
  };
 }
 
 @Test(dataProvider = "ValidEmailProvider")
 public void ValidEmailTest(String[] Email) {
 
    for(String temp : Email){
  boolean valid = emailValidator.validate(temp);
  System.out.println("Email is valid : " + temp + " , " + valid);
  Assert.assertEquals(true, valid);
    }
 
 }
 
 @Test(dataProvider = "InvalidEmailProvider", 
        dependsOnMethods="ValidEmailTest")
 public void InValidEmailTest(String[] Email) {
 
    for(String temp : Email){
     boolean valid = emailValidator.validate(temp);
     System.out.println("Email is valid : " + temp + " , " + valid);
     Assert.assertEquals(false, valid);
    } 
 } 
}

Reference

  1. http://en.wikipedia.org/wiki/E-mail_address
  2. http://tools.ietf.org/html/rfc2822#section-3.4.1
  3. http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression
 
 



No comments:

Post a Comment