ドメイン名の正規表現の例
ドメイン名の正規表現パターン
^((?!-)[A-Za-z0-9-]{1,63}(?
上記のパターンは、ドメイン名が次の基準に一致することを確認します。
-
ドメイン名はa-zでなければなりません| A-Z | 0-9およびハイフン(-)
-
ドメイン名の長さは1〜63文字である必要があります
-
Last Tldは2文字以上、6文字までである必要があります
-
ドメイン名の先頭または末尾にハイフン(-)を使用しないでください(例: -google.com or google-.com)
-
ドメイン名はサブドメインにすることができます(例: example.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 (?
Note
この正規表現パターンは、ほとんどの「実際に機能する」ドメイン名と一致する必要があります。
有効なドメイン名のリスト
-
www.google.com
-
google.com
-
example123.com
-
example-info.com
-
sub.example.com
-
sub.example-info.com
-
example.com.au
-
g.co
-
example.t.t.co
無効なドメイン名のリストとその理由。
-
example.t.t.c - Tld must between 2 and 6 long
-
example、com-カンマは許可されていません
-
例-Tldなし
-
example.123 , Tld not allow digit
-
.com-[A-Za-z0-9]で始まる必要があります
-
example.com/users - No Tld
-
-example.com - Cannot begin with a hyphen -
-
example-.com - Cannot end with a hyphen -
-
sub.-example.com-ハイフンで始めることはできません-
-
sub.example-.com - Cannot end with a hyphen -
1. Java正規表現の例
上記の正規表現パターンでドメイン名を検証する簡単なJavaの例。
DomainUtils.java
package com.example.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}(?
2. jUnitを使用した単体テスト
jUnitの例。
DomainUtilsTestParam.java
package com.example.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
出力、すべて合格。
4. TestNGを使用した単体テスト
TestNGの例。
DomainUtilsTestParam.java
package com.example.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", "example123.com", "example-info.com", "sub.example.com","sub.example-info.com", "example.com.au", "sub.example.com", "sub.sub.example.com", "g.co", "example.t.t.co" } } }; } @DataProvider public Object[][] InvalidDomainNameProvider() { return new Object[][] { { new String[] { "example.t.t.c", "example,com", "example", "example.123", ".com", "example.a", "example.com/users", "-example.com", "example-.com",".com", "sub.-example.com", "sub.example-.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 : example123.com Valid domain name : example-info.com Valid domain name : sub.example.com Valid domain name : sub.example-info.com Valid domain name : example.com.au Valid domain name : sub.example.com Valid domain name : sub.sub.example.com Valid domain name : g.co Valid domain name : example.t.t.co Invalid domain name : example.t.t.c Invalid domain name : example,com Invalid domain name : example Invalid domain name : example.123 Invalid domain name : .com Invalid domain name : example.a Invalid domain name : example.com/users Invalid domain name : -example.com Invalid domain name : example-.com Invalid domain name : .com Invalid domain name : sub.-example.com Invalid domain name : sub.example-.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 [ウィキペディア
-
インターネットトップレベルドメインのリスト]
-