У кого-либо есть польза (предпочтительно протестированный) regex для принятия только допустимого имени хоста DNS, IPv4 или адреса IPv6?
Я понимаю, что вы можете быть вынуждены использовать regex. Однако, если возможно, лучше избегать использования регексов для этой задачи и вместо них использовать класс библиотеки Java для выполнения проверки.
Если вы хотите выполнять проверку и поиск DNS вместе, то InetAddress.getByName(String)
будет хорошим выбором. Это позволит справиться с DNS, IPv4 и IPv6 за один раз, и вернет вам аккуратно обернутый экземпляр InetAddress
, который содержит как DNS-имя (если оно предоставлено), так и IPv4 или IPv6-адрес.
Если вам нужна только синтаксическая проверка, то в Apache commons есть пара классов, которые справятся с этой задачей: DomainValidator
and InetAddressValidator
.
Guava имеет новый класс HostSpecifier . Он даже проверит, что имя хоста (если это имя хоста) оканчивается допустимым «общедоступным суффиксом» (например, «.com», «.co.uk» и т. Д.) На основе последнего общедоступного суффикса Mozilla. список. Это то, что вы НЕ хотели бы пытаться использовать с созданным вручную регулярным выражением!