在C#中从字符串检查完整域

时间:2012-06-25 14:17:01

标签: c# regex

如何使用正则表达式检查字符串是完整域还是子域。

喜欢

abc.com | Full domain
xyz.abc.com | Subdomain
test.co.uk | Full domain
text.test.co.uk/ | Subdomain

2 个答案:

答案 0 :(得分:2)

递归执行DNS查找,同时从左侧删除一个部分

<强>子域

xyz.abc.com //DNS check PASS
abc.com //DNS check PASS

<强>域

xxx.com.hk //DNS check PASS
com.hk //DNS check FAIL

如果没有名称服务器/ DNS解析因其他原因而失败,另一种确认其是否为子域的方法是使用IANA的顶级域名注册管理机构Here

(有效使用)

有几种情况,例如com.comcom.google.com,以及其名称使用TLD的其他几个网址。

答案 1 :(得分:0)

如果无法检查正则表达式是域还是子域。大多数浏览器都使用Mozilla项目 - PublicSuffix来解决这个问题。它是TLD的维护列表。

您可以使用以下nuget包。 (安装包Nager.PublicSuffix) https://www.nuget.org/packages/Nager.PublicSuffix/

示例:

 var domainParser = new DomainParser();
 var data = await domainParser.LoadDataAsync();
 var tldRules = domainParser.ParseRules(data);
 domainParser.AddRules(tldRules);

 var domainName = domainParser.Get("sub.test.co.uk");
 //domainName.Domain = "test";
 //domainName.Hostname = "sub.test.co.uk";
 //domainName.RegistrableDomain = "test.co.uk";
 //domainName.SubDomain = "sub";
 //domainName.TLD = "co.uk";