Java 如何在Groovy中检查字符串是否为IP?

Java 如何在Groovy中检查字符串是否为IP?,java,grails,groovy,Java,Grails,Groovy,从给定字符串: String someIp = // some String 如何检查someIp是否为有效的Ip格式?正则表达式就可以了。有简单的,也有更复杂的。一个简单的正则表达式是: \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地址。有

从给定字符串:

String someIp = // some String

如何检查someIp是否为有效的Ip格式?

正则表达式就可以了。有简单的,也有更复杂的。一个简单的正则表达式是:

\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地址。有一个巨大的正则表达式可用于:

这个能正确地处理这项工作。如果您使用这个,不要忘记用另一个
\
来转义每个
\


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

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;
    }
}
公共静态布尔isIP(字符串str)
{
尝试
{
String[]parts=str.split(\\);
如果(parts.length!=4)返回false;
对于(int i=0;i<4;++i)
{
int p=Integer.parseInt(部分[i]);
如果(p>255 | | p<0)返回false;
}
返回true;
}捕获(例外e)
{
返回false;
}
}
您可以使用类来检查和验证字符串是否为有效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"
}
...

试试这个...

一种面向对象的方式:

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;
    } 


}

这是一个更好的答案,他显然比我更了解java中的正则表达式。我对正则表达式还相当陌生,还没有在JAVA中使用过很多,非常好。另外,在Groovy中,您可以使用
/regex/
字符串,因此不需要转义,并使用
=~
操作符检查正则表达式的匹配
String.metaClass.isIp={
   if(org.codehaus.groovy.grails.validation.routines.InetAddressValidator.getInstance().isValidInet4Address(delegate)){
    return true;
   } else {
    return false;
    } 


}