^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$
ドメイン名正規表現パターン
^((?!-)[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 - ハイフンで終わることはできません -
上記の正規表現パターンでドメイン名を検証する簡単な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();
}
} 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));
}
} 出力、すべてが渡されました。
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
表現]