Windows的Hosts文件允许您将IP地址与比普通互联网域名更自由的主机名相关联。我想创建一个函数,以确定给定名称是否是有效的"主机"文件域名。
基于这个答案和实验的结果,我得出了以下函数:
private static bool IsValidDomainName(string domain)
{
if (String.IsNullOrEmpty(domain) || domain.Length > 255)
{
return false;
}
Uri uri;
if (!Uri.TryCreate("http://" + domain, UriKind.Absolute, out uri))
{
return false;
}
if (!String.Equals(uri.Host, domain, StringComparison.OrdinalIgnoreCase) || !uri.IsWellFormedOriginalString())
{
return false;
}
foreach (string part in uri.Host.Split('.'))
{
if (part.Length > 63)
{
return false;
}
}
return true;
}
它的好处在于,它应该可以处理Unicode名称(基本正则表达式无法处理的情况)。是否有更好/更优雅的方法来做到这一点?更新:如Bill所建议的那样,Uri.CheckHostName方法几乎可以实现我想要的效果,但它不允许像Windows中的“hosts”文件中允许的“-test”这样的主机名。我会特别处理“-”部分,但我担心还有更多的特殊情况。
afdasdfa
同样是有效的。我已经以各种可能的方式进行了测试! - Dwzaafdasdfa
不是一个完全合格的域名,但它仍然像localhost
主机名一样是一个有效的主机名。 - Lightman