Поиск регулярного выражения/кода для проверки имени хоста/машинного имени

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

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

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

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

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

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

Ответ 1

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

Точка MAY отображается более одного раза. Проверьте это выражение здесь, и вы увидите, что оно соответствует.

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

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

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

Из wikipedia:

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

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

Ответ 2

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

Ответ 3

(?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])$ - принимает любые алфавиты и числовые символы вместе с дефисом и точкой