Проверить полное доменное имя в C # - PullRequest
5 голосов
/ 06 февраля 2011

Есть ли у кого-нибудь регулярное выражение для проверки допустимого полного доменного имени?

Теперь я использую это регулярное выражение:

(?=^.{1,254}$)(^(?:(?!\d+\.|-)[a-zA-Z0-9_\-]{1,63}(?!-)\.?)+(?:[a-zA-Z]{2,})$)

Однако это регулярное выражение приводит к тому, что «aa.a» не является действительным, в то время как «aa.aa» является действительным.

Кто-нибудь знает почему?

Ответы [ 2 ]

4 голосов
/ 06 февраля 2011

Вот более короткий шаблон:

(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)

Что касается того, почему шаблон определяет «aa.a» как недействительный, а «aa.aa» как действительный, это из-за {2,} - если вы измените 2 на 1, так что это

(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{1,})$)

он должен считать и "aa.a", и "aa.aa" действительными.

string pattern = @"(?=^.{1,254}$)(^(?:(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{1,})$)";
bool isMatch = Regex.IsMatch("aa.a", pattern);

isMatch это правда для меня.

3 голосов
/ 30 марта 2016

Я думаю, что это также может быть вариантом, особенно если полное доменное имя будет позже использоваться вместе с System.Uri:

var isWellFormed = Uri.CheckHostName(stringToCheck).Equals(UriHostNameType.Dns);

Обратите внимание, что этот код считает частично определенные доменные имена правильными.

...