Лучший способ определить, будет ли доменное имя допустимым в файле «hosts»?
ОкнаФайл хостов позволяет связать IP симя хоста это имеет гораздо большую свободу, чем обычное доменное имя в Интернете. Я хотел бы создать функцию, которая определяет, будет ли данное имя допустимым именем файлового домена "host".
На основеэтот ответ и экспериментируя, что работает, а что нет, я придумал эту функцию:
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 (где базовое регулярное выражение не будет работать).
Есть ли лучший / более элегантный способ сделать это?
ОБНОВИТЬ: По предложениюБилл,Uri.CheckHostName Метод почти делает то, что я хочу, но он не учитывает имена хостов, такие как «-test», которые Windows допускает в файле «hosts». Я бы выделил часть «-», но я обеспокоен тем, что есть и более особые случаи.