正規表現でメールアドレスを検証する方法
メールの正規表現パターン
^[_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
この組み合わせは、メールアドレスが「_A-Za-z0-9- \ +」で始まり、オプションで「。[_ A-Za-z0-9-]」が続き、「@」記号で終わる必要があることを意味します。 電子メールのドメイン名は「A-Za-z0-9-」で始まり、その後に第1レベルのTld(.com、.net)「。[A-Za-z0-9]」が続き、オプションで第2レベルのTldが続く必要があります(.com.au、.com.my)「\。[A-Za-z] \ {2、}」。ここで、第2レベルのTldはドット「。」で始まる必要があります。長さは2文字以上である必要があります。
1. Java正規表現の例
以下は、正規表現を使用してメールアドレスを検証する方法を示すJavaの例です。
EmailValidator.java
package com.example.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(); } }
2. 有効なメール
3. 無効なメール
1. 例–「@」記号
2が含まれている必要があります。 example @ .com.my – tldはドット「。」
3で始めることはできません。 [email protected] –「。a」は有効なtldではありません。最後のtldには少なくとも2文字
4が含まれている必要があります。 example123 @ .com – tldはドット「。」
5で始めることはできません。 example123 @ .com.com – tldはドット「。」
6で始めることはできません。 。[email protected] –電子メールの最初の文字をドット「。」で始めることはできません。
7。 example()@gmail.com – email’s is only allow character, digit,
underscore and dash
8. example@%.com –メールのTLDは、文字と数字のみを許可します
9。 [email protected] – double dots “.” are not allow
10. [email protected] – email’s last character can not end with dot “.”
11. example@[email protected] – double “@” is not allow
12. [email protected].1a -email’s tld which has two characters can not contains digit
4. 単体テスト
これがtestNGを使用した単体テストです。
EmailValidatorTest.java
package com.example.regex; import org.testng.Assert; import org.testng.annotations.*; /** * Email validator Testing * * @author example * */ public class EmailValidatorTest { private EmailValidator emailValidator; @BeforeClass public void initData() { emailValidator = new EmailValidator(); } @DataProvider public Object[][] ValidEmailProvider() { return new Object[][] { { new String[] { "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]" } } }; } @DataProvider public Object[][] InvalidEmailProvider() { return new Object[][] { { new String[] { "example", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "example()*@gmail.com", "example@%*.com", "[email protected]", "[email protected]", "example@[email protected]", "[email protected]" } } }; } @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(valid, true); } } @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(valid, false); } } }
これがユニットテストの結果です。
Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : [email protected] , true Email is valid : example , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : example()*@gmail.com , false Email is valid : example@%*.com , false Email is valid : [email protected] , false Email is valid : [email protected] , false Email is valid : example@[email protected] , false Email is valid : [email protected] , false PASSED: ValidEmailTest([Ljava.lang.String;@15f48262) PASSED: InValidEmailTest([Ljava.lang.String;@789934d4) =============================================== Default test Tests run: 2, Failures: 0, Skips: 0 ===============================================