開発者ドキュメント

正規表現で電子メールアドレスを検証する方法


image、title = "Email</em>Icon"、width = 299、height = 256

電子メールの正規表現パターン

^[__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.mkyong.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();

    }
}

3.無効なメール

{空} 1。 mkyong – .com.my – tldはドット “。”で始めることはできません+ 3. mkyong123@gmail.a – “.a”は有効なtldではなく、最後のtldにはmkyong123 @。com – tldはドット “。”で始めることはできません。 “+ 6. mkyong123 @ .com.com – tldはドット”。 “で始めることはできません。+ 6. mkyong @ mkyong.com – mkeyong()

@ gmail.com – 電子メールは文字、数字、アンダースコア、ダッシュ+8のみを許可します。mkyong@%

.com – 電子メールの最初の文字はドットで始めることはできません。 mkyong..2002 @ gmail.com – ダブルドット “。”は許可されていません+ 10。mkyong。@ gmail.com – 電子メールの最後の文字はドットで終わることはできません “” mkeyong @ mkyong @ gmail.com – ダブル「@」は許可されていません。 12です。

mkyong@gmail.com

.1a – 2文字のメールは、数字を含むことはできません

ユニットテスト

ここでは、http://testng.org[testNG]を使用した単体テストがあります。

EmailValidatorTest.java

package com.mkyong.regex;

import org.testng.Assert;
import org.testng.annotations.** ;
/** **
 **  Email validator Testing
 **
 **  @author mkyong
 **
 ** /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", "mkyong+100@gmail.com",
            "mkyong-100@yahoo-test.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(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 : mkyong@yahoo.com , true
Email is valid : mkyong-100@yahoo.com , true
Email is valid : mkyong.100@yahoo.com , true
Email is valid : mkyong111@mkyong.com , true
Email is valid : mkyong-100@mkyong.net , true
Email is valid : mkyong.100@mkyong.com.au , true
Email is valid : mkyong@1.com , true
Email is valid : mkyong@gmail.com.com , true
Email is valid : mkyong+100@gmail.com , true
Email is valid : mkyong-100@yahoo-test.com , true
Email is valid : mkyong , false
Email is valid : mkyong@.com.my , false
Email is valid : mkyong123@gmail.a , false
Email is valid : mkyong123@.com , false
Email is valid : mkyong123@.com.com , false
Email is valid : .mkyong@mkyong.com , false
Email is valid : mkyong()** @gmail.com , false
Email is valid : mkyong@%** .com , false
Email is valid : mkyong..2002@gmail.com , false
Email is valid : mkyong.@gmail.com , false
Email is valid : mkyong@mkyong@gmail.com , false
Email is valid : mkyong@gmail.com.1a , false
PASSED: ValidEmailTest([Ljava.lang.String;@15f48262)
PASSED: InValidEmailTest([Ljava.lang.String;@789934d4)

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================
モバイルバージョンを終了