7

从给定的字符串:

String someIp = // some String

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

4

3 回答 3

12

您可以使用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"
}
...

尝试这个..,。

于 2013-08-10T08:12:40.083 回答
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;
    }
}
于 2013-08-09T23:46:38.537 回答
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;
    } 


}
于 2014-05-28T08:48:38.763 回答