Ищем регулярное выражение / код для проверки имени хоста / имени машины - PullRequest
3 голосов
/ 10 января 2011

Требуется регулярное выражение проверки имени хоста.

Регулярное выражение для соответствия имени хоста DNS или IP-адресу?

В этой ссылке господа предлагают достойное регулярное выражение.У меня есть несколько проблем / вопросов с этим:

  • На компьютерах Windows / сети разрешены имена, такие как 1abcd (проверено в нашей локальной сети)
  • В предложенном регулярном выражении точкаможет появиться только один раз.Я бы предположил, что abc.def.gh также является допустимым именем хоста, не так ли.

Странно, но также не смог найти класс .NET, который может проверять строку имени хоста (ситуация?).Будем очень благодарны за любые советы.

Обновление : для любого предложения класса / метода - пожалуйста, сообщите что-нибудь, что будет работать и в .NET / C #, и в SilverLight.

Ответы [ 3 ]

2 голосов
/ 14 января 2011

В предложенном регулярном выражении точка может появляются только один раз. Я бы предположил, что abc.def.gh является допустимым именем хоста как хорошо, не правда ли.

Точка МОЖЕТ появляться более одного раза. Проверьте регулярное выражение здесь , и вы увидите, что оно соответствует.

Соответствующий фрагмент регулярного выражения (первая часть):

([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*

На компьютерах Windows / имена сетей как 1abcd разрешены (проверено на наша локальная сеть)

Из Википедия :

оригинальная спецификация имена хостов в RFC 952 , обязательные для ярлыки не могут начинаться с цифры или с дефисом и не должен заканчиваться дефис. Однако последующее спецификация ( RFC 1123 ) разрешена метки имени хоста начинаются с цифр.

Я ссылался на RFC 952 . Я попытаюсь обновить регулярное выражение для имен хостов, чтобы они соответствовали RFC 1123 .

2 голосов
/ 10 января 2011

Является ли Uri.CheckHostName методом, который может вам помочь? Если имя хоста не распознано, результатом будет "Неизвестно" .

0 голосов
/ 28 июня 2016

(?i)(?=.{5,20}$)^(([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])\.)*([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])$

Объяснение:

(?i) - игнорировать регистр

(?=.{5,20}$) - ограничить длину строки в пределах от 5 до 20 символов.

^(([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])\.)*([a-z\d]|[a-z\d][a-z\d\-]*[a-z\d])$ - принимает любые алфавиты и цифры вместе с дефисом и точкой

...