用于接受有效主机名,IPv4或IPv6地址的Java正则表达式

ljb*_*ade 6 java regex hostname ipv4 ipv6

任何人都有一个好的(最好是经过测试的)正则表达式,只能使用有效的DNS主机名,IPv4或IPv6地址?

Ste*_*n C 19

我知道您可能被迫使用正则表达式.但是,如果可能,最好避免使用正则表达式执行此任务,并使用Java库类来进行验证.

如果您想一起进行验证和DNS查找,那么这InetAddress.getByName(String)是一个不错的选择.这将一次性处理DNS,IPv4和IPv6,并返回一个InetAddress包含DNS名称(如果提供)和IPv4或IPv6地址的整齐包装的实例.

如果你只想进行语法验证,那么Apache commons有几个应该完成工作的类:DomainValidatorInetAddressValidator.


Kev*_*ion 5

Guava有一个新类HostSpecifier.它甚至会验证主机名(如果它是主机名)以有效的"公共后缀"(例如".com",".co.uk"等)结尾,基于最新的mozilla公共后缀名单.这是你不想用手工制作的正则表达式尝试的东西!