Email Regular Expression Pattern
Description
^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@ [A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$
^ #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
- http://en.wikipedia.org/wiki/E-mail_address
- http://tools.ietf.org/html/rfc2822#section-3.4.1
- http://www.mkyong.com/regular-expressions/how-to-validate-email-address-with-regular-expression
No comments:
Post a Comment