java - 用于验证 InetSocketAddresses(ipv4/v6 + 端口地址)的正则表达式

标签 java regex ipv6 ipv4 port-number

我正在寻找 ipv4 和 ipv6 的测试正则表达式 InetSocketAddress (即 IP 地址 + 端口号)。我对验证主机名不感兴趣。

它可以是两个正则表达式(一个用于 ipv4,一个用于 ipv6)或一个组合的正则表达式。

有没有人可以分享?

编辑

有关 ip4 格式的信息,请参阅 here , 有关 ipv6 格式的信息,请参阅 here .然后,端口号加上':'。

编辑 2 要创建字符串表示,我将这样进行:

byte[] tmp = { 10, 1, 0, 0 };
InetSocketAddress isa = new InetSocketAddress(
        InetAddress.getByAddress(tmp), 443);

返回:

/10.1.0.0:443

最佳答案

尝试在 InetSocketAddress.toString() 上使用正则表达式来执行此操作可能不是一个好主意。 (见上面问题的评论)

一种可能的替代方法是使用 URLURI以字符串格式打印地址,即much more standardized .


**编辑:**

另一方面,如果你想用正则表达式折磨自己......;-)

IPv4:

      Pattern: .*/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)
Java constant: ".*/([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+):([0-9]+)"

仅处理点分四组格式地址。不检测无效地址。

IPv6:

      Pattern: .*/([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+(%[a-zA-Z0-9]+)?):([0-9]+)
Java constant: ".*/([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+(%[a-zA-Z0-9]+)?):([0-9]+)"

处理所有 8 个 16 位部分的 IPv6 地址。 (再次注意,这有效的唯一原因是因为 Java 中的 Inet6Address 实现似乎以非标准方式打印地址 - 可能因此它可以附加端口号并且没有歧义)不检测无效的 IPv6 地址。仅处理小写十六进制字符。使用大写或小写字母和/或数字处​​理区域/范围 ID(如果存在)。

我用 handy applet I found 测试了它们.

郑重声明,我仍然认为这是个坏主意。 ;-) 我不确定是否所有 Java 平台都会以这种方式打印地址。

关于java - 用于验证 InetSocketAddresses(ipv4/v6 + 端口地址)的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747548/

相关文章:

java - 隐藏导航栏?

java - 建议将多个服务注入(inject)到一个类中吗?

php - 清理属性名称

java - 从jtable中插入数据到sqlite数据库

java - 在 Android 中以编程方式查找专辑封面和封面

sql - Oracle - 用正则表达式列表替换记录的子字符串

regex - 正则表达式 - 替换前面的 if 字符不是 x

linux - ipv6通信失败时回退ipv4机制

c++ - iOS 套接字 IPv6 支持

php - 使用 PHP 检查 IPv4/IPv6 地址是否已启动