在Groovy中如何检查一个字符串是否为IP地址?

8

给定一个字符串:

String someIp = // some String

我该如何检查 someIp 是否为有效的IP格式?

4个回答

13
您可以使用 InetAddressValidator 类来检查和验证字符串是否是有效的 IP 地址。
import org.codehaus.groovy.grails.validation.routines.InetAddressValidator

...
String someIp = // some String
if(InetAddressValidator.getInstance().isValidInet4Address(someIp)){
    println "Valid Ip"
} else {
    println "Invalid Ip"
}
...

尝试这个...


3
正则表达式就可以了。有简单的和更复杂的正则表达式。一个简单的正则表达式如下:
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

使用方法如下:

boolean isIP = someIP.maches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}");

但是这样会匹配到999.999.999.999,这不是一个有效的IP地址。在regular-expressions.info上有一个非常大的正则表达式:

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

这个代码可以正确处理工作。如果您使用此代码,请不要忘记用另一个\转义每个\


如果您不喜欢巨大的正则表达式,可以使用以下代码:

public static boolean isIP(String str)
{
    try
    {
         String[] parts = str.split("\\.");
         if (parts.length != 4) return false;
         for (int i = 0; i < 4; ++i)
         {
             int p = Integer.parseInt(parts[i]);
             if (p > 255 || p < 0) return false;
         }
         return true;
    } catch (Exception e)
    {
        return false;
    }
}

2
这是最好的答案,他显然比我更懂Java中的正则表达式,请选择这个。我对正则表达式的世界还很陌生,并且在JAVA中还没有多少使用经验。 - CamelopardalisRex
非常好。此外,在Groovy中,您可以使用/regex/字符串,因此不需要转义,并使用==〜运算符来检查正则表达式匹配。 - Will

1
一种面向对象的方式:
String myIp ="192.168.43.32"
myIp.isIp();

已知,您必须将以下内容添加到 BootStrap.groovy 中:
String.metaClass.isIp={
   if(org.codehaus.groovy.grails.validation.routines.InetAddressValidator.getInstance().isValidInet4Address(delegate)){
    return true;
   } else {
    return false;
    } 


}

0
使用像Apache的commons-validator这样的验证器:
@Grab('commons-validator:commons-validator:1.7')
import org.apache.commons.validator.routines.InetAddressValidator

boolean isIpV4(String ip) {
    InetAddressValidator.instance.isValidInet4Address(ip)
}

isIpV4("8.8.8.8")

或正则表达式:

import java.util.regex.Pattern

class RegexValidationConstants {
    private final static String IPV4_OCT = /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/
    final static Pattern IPV4 = ~/^${IPV4_OCT}(\.${IPV4_OCT}){3}$/.toString()
}

boolean isIpV4(String ip) {
    ip ==~ RegexValidationConstants.IPV4
}

isIpV4("8.8.8.8")

如果你正在使用Grails,请参考我在另一个线程中的回答

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接