Les fenêtres Fichier des hôtes permet d'associer une IP à un nom d'hôte qui offre beaucoup plus de liberté qu'un nom de domaine Internet normal. J'aimerais créer une fonction qui détermine si un nom donné est un nom de domaine de fichier "hôte" valide.
Sur la base de cette réponse et l'expérimentation de ce qui fonctionne et de ce qui ne fonctionne pas, j'en suis arrivé à cette fonction :
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;
}
Elle présente également l'avantage de fonctionner avec les noms Unicode (alors qu'une expression rationnelle de base échouerait).
Existe-t-il un moyen plus efficace/élégant de procéder ?
MISE À JOUR : Comme suggéré par Projet de loi , le Uri.CheckHostName fait presque ce que je veux, mais elle ne permet pas d'utiliser des noms d'hôtes comme "-test" que Windows autorise dans un fichier "hosts". Je ferais un cas spécial pour la partie "-", mais je crains qu'il y ait d'autres cas spéciaux.