ドメイン名、幅= 320、高さ= 240

ドメイン名正規表現パターン

^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$

上記のパターンは、ドメイン名が次の基準と一致することを確認します。

  1. ドメイン名はa-z |でなければなりません. | 0-9とハイフン( – )

  2. ドメイン名の長さは1〜63文字です

  3. 最後のTldは少なくとも2文字で、最大6文字でなければなりません

文字
。ドメイン名はハイフン( – )で始まらないでください(例:

-google.com or google-.com)
。ドメイン名はサブドメイン(例:mkyong.blogspot.com)にすることができます。

^               #Start of the line
 (              #Start of group #1
    (?! -)          #Can't start with a hyphen
   [A-Za-z0-9-]{1,63}  #Domain name is[A-Za-z0-9-], between 1 and 63 long
    (?<!-)           #Can't end with hyphen
    \\.         #Follow by a dot "."
 )+             #End of group #1, this group must appear at least 1 time, but allowed multiple times for subdomain
[A-Za-z]{2,6}          #TLD is[A-Za-z], between 2 and 6 long
$               #end of the line

  • 注意** この正規表現パターンは、実際のドメイン名の大部分と一致する必要があります。

有効なドメイン名のリスト

  1. www.google.com

  2. Google COM

  3. mkyong123.com

  4. mkyong-info.com

  5. sub.mkyong.com

  6. sub.mkyong-info.com

  7. mkyong.com.au

  8. g.co

  9. mkyong.t.t.co

無効なドメイン名のリストとその理由。

  1. mkyong.t.t.c – Tldは2から6の間でなければならない

  2. mkyong、com – コンマは許可されていません

  3. mkyong – No Tld

  4. mkyong.123、Tldは数字を許可しない

  5. .com – [A-Za-z0-9]で始まる必要があります

  6. mkyong.com/users – No Tld

  7. -mkyong.com – ハイフンで始めることはできません –

  8. mkyong-.com – ハイフンで終わらない –

  9. sub.-mkyong.com – ハイフンで始めることはできません –

  10. sub.mkyong-.com – ハイフンで終わることはできません –

1. Javaの正規表現の例

上記の正規表現パターンでドメイン名を検証する簡単なJavaの例。

DomainUtils.java

package com.mkyong.regex;

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DomainUtils {

    private static Pattern pDomainNameOnly;
    private static final String DOMAIN__NAME__PATTERN = "^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$";

    static {
        pDomainNameOnly = Pattern.compile(DOMAIN__NAME__PATTERN);
    }

    public static boolean isValidDomainName(String domainName) {
        return pDomainNameOnly.matcher(domainName).find();
    }

}

2. jUnitによる単体テスト

jUnitの例

DomainUtilsTestParam.java

package com.mkyong.regex;

import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(value = Parameterized.class)
public class DomainUtilsTestParam {

    private String domain;
    private boolean expected;

    public DomainUtilsTestParam(String domain, boolean expected) {
        this.domain = domain;
        this.expected = expected;
    }

    @Parameters(name= "{index}: isValid({0})={1}")
    public static Iterable<Object[]> data() {
        return Arrays.asList(new Object[][]{
        { "www.google.com", true },
        { "google.com", true },
        { "mkyong123.com", true },
        { "mkyong-info.com", true },
        { "sub.mkyong.com", true },
                { "sub.mkyong-info.com", true },
                { "mkyong.com.au", true },
                { "sub.mkyong.com", true },
                { "sub.sub.mkyong.com", true },
                { "g.co", true },
                { "mkyong.t.t.co", true },
                { "mkyong.t.t.c", false },     //Tld must at between 2 and 6 long
                { "mkyong,com", false },   //comma not allowed
                { "mkyong", false },       //no tld
                { "mkyong.123", false },   //digit not allowed in tld
                { ".com", false },     //must start with[A-Za-z0-9]                { "mkyong.a", false },     //last tld need at least two characters
                { "mkyong.com/users", false }, //no tld
                { "-mkyong.com", false },  //Cannot begin with a hyphen -
                { "mkyong-.com", false },  //Cannot end with a hyphen -
                { "sub.-mkyong.com", false },  //Cannot begin with a hyphen -
                { "sub.mkyong-.com", false }   //Cannot end with a hyphen -
            }
    );
     }

    @Test
    public void test__validDomains() {
    assertEquals(expected,DomainUtils.isValidDomainName(domain));
    }

}

出力、すべてが渡されました。


domain-regex-junit、width = 490、height = 429

4. TestNGによる単体テスト

TestNGの例。

DomainUtilsTestParam.java

package com.mkyong.regex;

import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DomainUtilsTestParam {

    @DataProvider
    public Object[][]ValidDomainNameProvider() {
      return new Object[][]{{
               new String[]{
        "www.google.com", "google.com",
        "mkyong123.com", "mkyong-info.com",
        "sub.mkyong.com","sub.mkyong-info.com",
        "mkyong.com.au", "sub.mkyong.com",
        "sub.sub.mkyong.com", "g.co", "mkyong.t.t.co" } } };
    }

    @DataProvider
    public Object[][]InvalidDomainNameProvider() {
      return new Object[][]{ { new String[]{
        "mkyong.t.t.c", "mkyong,com",
        "mkyong", "mkyong.123",
        ".com", "mkyong.a",
        "mkyong.com/users", "-mkyong.com",
        "mkyong-.com",".com", "sub.-mkyong.com", "sub.mkyong-.com"} } };
    }

    @Test(dataProvider = "ValidDomainNameProvider")
    public void ValidDomainNameTest(String[]domainName) {

        for (String temp : domainName) {
            boolean valid = DomainUtils.isValidDomainName(temp);
            System.out.println("Valid domain name : " + temp);
            Assert.assertEquals(valid, true);
        }

    }

    @Test(dataProvider = "InvalidDomainNameProvider",
              dependsOnMethods = "ValidDomainNameTest")
    public void InValidDomainNameTest(String[]domainName) {

        for (String temp : domainName) {
            boolean valid = DomainUtils.isValidDomainName(temp);
            System.out.println("Invalid domain name : " + temp);
            Assert.assertEquals(valid, false);
        }
    }

}

結果

Valid domain name : www.google.com
Valid domain name : google.com
Valid domain name : mkyong123.com
Valid domain name : mkyong-info.com
Valid domain name : sub.mkyong.com
Valid domain name : sub.mkyong-info.com
Valid domain name : mkyong.com.au
Valid domain name : sub.mkyong.com
Valid domain name : sub.sub.mkyong.com
Valid domain name : g.co
Valid domain name : mkyong.t.t.co
Invalid domain name : mkyong.t.t.c
Invalid domain name : mkyong,com
Invalid domain name : mkyong
Invalid domain name : mkyong.123
Invalid domain name : .com
Invalid domain name : mkyong.a
Invalid domain name : mkyong.com/users
Invalid domain name : -mkyong.com
Invalid domain name : mkyong-.com
Invalid domain name : .com
Invalid domain name : sub.-mkyong.com
Invalid domain name : sub.mkyong-.com
PASSED: ValidDomainNameTest([Ljava.lang.String;@4661e987)
PASSED: InValidDomainNameTest([Ljava.lang.String;@117b8cf0)

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================

参考文献

ルックアラウンドアサーション]。

http://en.wikipedia.org/wiki/List


of

Internet

top-level

domains[ウィキペディア

ドメイン]。

http://en.wikipedia.org/wiki/Regular__expression

[Wikipedia – Regular

表現]