Java如何校验IP/Domain格式
说到校验IP地址或者Domain的格式是否正确,很多人可能是想到用正则表达式来校验。
一种比较好的做法是使用现成的库来完成此功能,尤其是比较流行的类库,经过了大量的验证,比自己实现要安全可靠。
本文推荐使用Google的Guava库里的工具类来校验。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
校验IP地址格式的有效性
//com.google.common.net.InetAddresses#isInetAddress(String ipString)
InetAddresses.isInetAddress("1.1.1.1");//true
InetAddresses.isInetAddress("1.1.1");//false
InetAddresses.isInetAddress("127.0.0.1");//true
InetAddresses.isInetAddress("fc00::");//true
InetAddresses.isInetAddress("localhost");//false
InetAddresses.isInetAddress("256.256.1212.1");//false
InetAddresses.isInetAddress("256.256.257.1");//false
InetAddresses.isInetAddress("300.300.300.300");//false
//校验ip是ipv4地址还是ipv6地址
InetAddresses.forString("fc00::") instanceof Inet6Address;//true
InetAddresses.forString("127.0.0.1") instanceof Inet4Address;//true
校验Domain的合法性
//com.google.common.net.InternetDomainName#isValid(String name)
InternetDomainName.isValid("www.baidu.com"); //true
InternetDomainName.isValid("127.0.0.1"); //false
InternetDomainName.isValid("a.b.c.com"); //true
InternetDomainName.isValid("http://a.b.c.com"); //false
InternetDomainName.isValid("http://a.b.c.com/"); //false
Url的host部分合法性的校验
//com.google.common.net.HostSpecifier#isValid(String specifier)
//检查是否可以作为url的host部分,可能是domain或者ip
HostSpecifier.isValid("a.b.c.com");//true
HostSpecifier.isValid("a.b.c.com:90");//false
HostSpecifier.isValid("http://a.b.c.com");//false
HostSpecifier.isValid("127.0.0.1");//true
HostSpecifier.isValid("127.0.0.1:80");//false
HostSpecifier.isValid("111::");//true