给定一个字符串:
String someIp = // some String
我该如何检查 someIp 是否为有效的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"
}
...
尝试这个...
\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;
}
}
String myIp ="192.168.43.32"
myIp.isIp();
String.metaClass.isIp={
if(org.codehaus.groovy.grails.validation.routines.InetAddressValidator.getInstance().isValidInet4Address(delegate)){
return true;
} else {
return false;
}
}
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")
/regex/
字符串,因此不需要转义,并使用==〜
运算符来检查正则表达式匹配。 - Will