Поиск регулярного выражения/кода для проверки имени хоста/машинного имени
Поиск регулярного выражения проверки имени хоста.
Регулярное выражение для соответствия имени хоста 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])$
- принимает любые алфавиты и числовые символы вместе с дефисом и точкой