java字符串检测ip
假设一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一组简单的正则表达式,带有 Pattern 类 将为此工作:
我借用了 this 的正则表达式所以回答。查看有关主机名的维基百科文章,了解有关有效主机名的详细信息。
A simple set of regular expressions with the Pattern class will work for this:
I borrowed the regular expressions from this SO answer. Check the Wikipedia article on hostnames for more on what constitutes a valid hostname.
如果您的地址带有冒号
:
那么它就是 IPv6 地址。其余字符可以是十六进制数字(0-1、AF、af)。如果地址只有数字和点,则它是 IPv4 地址。
如果地址包含任何字母,则它是主机名(主机名也可以包含数字、点和其他字符)。
这可以简单地实现为:
此代码不检查地址是否有效。
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:
This code do not check if address is valid.
使用正则表达式匹配与 ip,如果它不是 ip 那么它是一个主机名。
Use regular expression to match vs ip, if its not ip then its a hostname.