Файл Windows 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 ". Я бы выделил часть «-», но я обеспокоен тем, что есть и более особые случаи.