如何使用正则表达式检查字符串是完整域还是子域。
喜欢
abc.com | Full domain
xyz.abc.com | Subdomain
test.co.uk | Full domain
text.test.co.uk/ | Subdomain
递归地进行 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 的 TLD (Top-Level Domain) Registry Here。
(谨慎使用)
有几种情况,例如com.com
,com.google.com
和其他几个在其名称中使用 TLD 的 URL。
使用 Regex 如果无法检查是域还是子域。大多数浏览器使用 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";