java - java中的ip地址是否有效

标签 java regex validation ip-address port-number

我想使用正则表达式验证带或不带端口号的 IP 地址。我的输入字符串是 IP:PORT 或只是 IP。我只想要一个 regex 来验证 IP:PORTIP 两者。

我的 IP 地址正则表达式是:

^(?:(?:1\d?\d|[1-9]?\d|2[0-4]\d|25[0-5])\.){3}(?:1\d?\d|[1-9]?\d|2[0-4]\d|25[0-5])$

有人可以告诉我如何向这个现有的正则表达式添加可选端口号吗?

最佳答案

为什么这么复杂:谷歌搜索:http://answers.oreilly.com/topic/318-how-to-match-ipv4-addresses-with-regular-expressions/

您还试图在一个地方做太多事情。将正则表达式用于它的优点,然后将其他智能用于正则表达式不是正确工具的地方。在您的情况下,不要尝试验证正则表达式中 IP 地址的值范围,而是在后处理中:

.... ^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(:(\d{1,5}))?$

byte[] ip = new byte[4];
for (int i = 1; i <= 4; i++) {
    int bt = Integer.parseInt(matcher.group(i));
    if (bt < 0 || bt > 255) {
       throw new IllegalArgumentException("Byte value " + bt + " is not valid.");
    }
    ip[i-1] = (byte)bt;
}
integer port = 0;
if (matcher.group(6) != null) {
  port = Integer.parseInt(matcher.group(6));
}

关于java - java中的ip地址是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402078/

相关文章:

java - 如何在 Heroku 上与 Node.js 应用程序并行运行 Java 11 .jar 文件?

java - 实现公共(public)上下文搜索 - 如何处理?

在客户端 PC 上将 java 7 - 25 更新到最新版本 7 - 45 后的 java 客户端应用程序

java - 检查自定义字符串模式

javascript 用超链接替换 ​​[] 内文本的所有实例

regex - 使用 .htaccess 重定向到动态相对路径?

javascript - 简单的表单验证不起作用

java - 我们如何能够在 Java 中创建任何类或接口(interface)的数组?

Python jsonschema 不标记日期时间错误

javascript 字符串正则表达式(css有效性检查+转换)