java字符串检测ip

发布于 2024-10-20 14:43:05 字数 311 浏览 1 评论 0原文

假设一个 java 字符串包含 IP(v4 或 v6)主机名。
检测这些情况的最佳方法是什么?
我对 IP 是否在有效范围内不太感兴趣(例如 IPv4 的 999.999.999.999)。
我感兴趣的只是一种检测字符串是主机名还是 IP(v4 或 v6)的方法。
最初我是这样想的:

if(theString.indexOf("@")!=-1){
//Not an Ip
}

但我不确定我是否应该总是期望包含 @ 的格式。

谢谢

Assume a java string that contains an IP (v4 or v6) or a hostname.
What is the best way to detect among these cases?
I am not interested so much on whether the IP is in valid range (e.g. 999.999.999.999 for IPv4).
I am interested in just a way to detect if a String is a hostname or an IP (v4 or v6).
Initially I though this:

if(theString.indexOf("@")!=-1){
//Not an Ip
}

but I am not sure if I should always expect a format containing @ always.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

新一帅帅 2024-10-27 14:43:05

一组简单的正则表达式,带有 Pattern 类 将为此工作:

Pattern validIpAddressRegex = Pattern.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$");
Pattern validHostnameRegex = Pattern.compile("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$");

// matches(String) Will return a boolean value
validIpAddress.matches("111.222.333.444"); 

我借用了 this 的正则表达式所以回答。查看有关主机名的维基百科文章,了解有关有效主机名的详细信息。

A simple set of regular expressions with the Pattern class will work for this:

Pattern validIpAddressRegex = Pattern.compile("^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$");
Pattern validHostnameRegex = Pattern.compile("^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$");

// matches(String) Will return a boolean value
validIpAddress.matches("111.222.333.444"); 

I borrowed the regular expressions from this SO answer. Check the Wikipedia article on hostnames for more on what constitutes a valid hostname.

一页 2024-10-27 14:43:05

如果您的地址带有冒号 : 那么它就是 IPv6 地址。其余字符可以是十六进制数字(0-1、AF、af)。

如果地址只有数字和点,则它是 IPv4 地址。

如果地址包含任何字母,则它是主机名(主机名也可以包含数字、点和其他字符)。

这可以简单地实现为:

public static String kindOfIP(final String addr)
    {
    if (addr.indexOf(":") >= 0)
        return "IPv6";
    if (addr.matches("^\\d+\\.\\d+\\.\\d+\\.\\d+$"))
        return "IPv4";
    return "hostname";
    }

此代码不检查地址是否有效。

If your address has colons : then it is IPv6 address. Rest of chars can be hex digits (0-1, A-F, a-f).

If address has only digits and dots then it is IPv4 address.

If address has any letter then it is hostname (hostname can have digits, dots and other chars as well).

This can be simply implemented as:

public static String kindOfIP(final String addr)
    {
    if (addr.indexOf(":") >= 0)
        return "IPv6";
    if (addr.matches("^\\d+\\.\\d+\\.\\d+\\.\\d+$"))
        return "IPv4";
    return "hostname";
    }

This code do not check if address is valid.

水溶 2024-10-27 14:43:05

使用正则表达式匹配与 ip,如果它不是 ip 那么它是一个主机名。

Use regular expression to match vs ip, if its not ip then its a hostname.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文