ドメイン名正規表現の例
ドメイン名正規表現パターン
^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$
上記のパターンは、ドメイン名が次の基準と一致することを確認します。
-
ドメイン名はa-z |でなければなりません. | 0-9とハイフン( – )
-
ドメイン名の長さは1〜63文字です
-
最後の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
-
注意** この正規表現パターンは、実際のドメイン名の大部分と一致する必要があります。
有効なドメイン名のリスト
-
www.google.com
-
Google COM
-
mkyong123.com
-
mkyong-info.com
-
sub.mkyong.com
-
sub.mkyong-info.com
-
mkyong.com.au
-
g.co
-
mkyong.t.t.co
無効なドメイン名のリストとその理由。
-
mkyong.t.t.c – Tldは2から6の間でなければならない
-
mkyong、com – コンマは許可されていません
-
mkyong – No Tld
-
mkyong.123、Tldは数字を許可しない
-
.com – [A-Za-z0-9]で始まる必要があります
-
mkyong.com/users – No Tld
-
-mkyong.com – ハイフンで始めることはできません –
-
mkyong-.com – ハイフンで終わらない –
-
sub.-mkyong.com – ハイフンで始めることはできません –
-
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)); } }
出力、すべてが渡されました。
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/トップレベルドメイン
[ウィキペディア – トップレベル
-
ドメイン]。
http://en.wikipedia.org/wiki/Regular__expression
[Wikipedia – Regular
表現]