最近在做主机管理系统,当用户给某个主机更改主机头时,要判断绑定的主机头是否已经备案,查询是否备案的服务已经有了,传入的参数是一个域名的顶级域名。想在网上找个正则,没有发现合适的,就自已写了一个返回顶级域名的方法,做个备忘,以后如果其它语言用到此功能,直接按方法的逻辑改就行,方法如下:
/// <summary> /// 获取域名的顶级域名 /// </summary> /// <param name="domain"></param> /// <returns></returns> public static string GetTopDomainName(string domain) { //https://www.safsd.asdfasdf.baidu.com.cn/ssssd/s/b/d/hhh.html?domain=sfsdf.com.cn&id=1 domain = domain.Trim().ToLower(); string rootDomain = ".com.cn|.gov.cn|.cn|.com|.net|.org|.so|.co|.mobi|.tel|.biz|.info|.name|.me|.cc|.tv|.asiz|.hk"; if (domain.StartsWith("http://")) domain=domain.Replace("http://", ""); if (domain.StartsWith("https://")) domain = domain.Replace("https://", ""); if (domain.StartsWith("www.")) domain = domain.Replace("www.", ""); //safsd.asdfasdf.baidu.com.cn/ssssd/s/b/d/hhh.html?domain=sfsdf.com.cn&id=1 if (domain.IndexOf("/") > 0) domain = domain.Substring(0, domain.IndexOf("/")); //safsd.asdfasdf.baidu.com.cn foreach (string item in rootDomain.Split('|')) { if (domain.EndsWith(item)) { domain = domain.Replace(item, ""); if (domain.LastIndexOf(".") > 0)//adfasd.asdfas.cn { domain = domain.Replace(domain.Substring(0, domain.LastIndexOf(".")+1), ""); } return domain +item ; } continue; } return ""; }