校验地址问题,谁帮找找原因?
//==============================================================================
//
//@author Slive
//@date 2013-6-18
//
//==============================================================================
package org.slive.validator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* ValidatorUtil supplies many ordinary validation functions,such as:<br/>
* <ul>
* <li> ipv4 address validate
* <li> device mac address validate
* </ul>
* @author Slive
*/
public class ValidateUtil
{
public static final String IPV4_REGEX = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
public static final String MAC_REGEX = "([0-9A-Fa-f]{2})(-[0-9A-Fa-f]{2}){5}";
public static final String R_1_65535_REGEX = "([1-9](\\d{0,3}))|([1-5](\\d{4}))|(6553[0-5])|(655[0-2]\\d)|(65[0-4](\\d{2}))|(6[0-4](\\d{3}))";
public static final String IPV4_PORT_REGEX = IPV4_REGEX + "(\\/)" + R_1_65535_REGEX;
public static final String UDP_IPV4_PORT_REGEX = "([uU][dD][pP])(\\:)" + IPV4_PORT_REGEX;
public static final String TCP_IPV4_PORT_REGEX = "([tT][cC][pP])(\\:)" + IPV4_PORT_REGEX;
/**
* Legal ipv4 address follow as: "xxx(1-255).xxx.xxx.xxx(0-255)"
* @param ipv4 ipv4 address
* @returnif ipv4 is null, it will return false;
* @see #IP_REGEX
*/
public static boolean ipV4Validate(String ipv4){
return ipv4Validate(ipv4,IPV4_REGEX);
}
/**
* Legal device mac address follow as: "xx-xx-xx-xx-xx(0-9a-f)"
* @param mac device mac address
* @returnif mac is null, it will return false;
* @see #MAC_REGEX
*/
public static boolean macValidate(String mac){
return ipv4Validate(mac,MAC_REGEX);
}
/**
* Legal address follow as:"udp:127.0.0.1/1080"
* @param udpIpv4Port
* @see #UDP_IPV4_PORT_REGEX
*/
public static boolean udpIpv4PortValidate(String udpIpv4Port){
return ipv4Validate(udpIpv4Port,UDP_IPV4_PORT_REGEX);
}
/**
* Legal address follow as:"tcp:127.0.0.1/1080"
* @param tcpIpv4Port
* @see #TCP_IPV4_PORT_REGEX
*/
public static boolean tcpIpv4PortValidate(String tcpIpv4Port){
return ipv4Validate(tcpIpv4Port,TCP_IPV4_PORT_REGEX);
}
/**
* Legal address follow as:"127.0.0.1/1080"
* @param ipv4Port
* @see #IPV4_PORT_REGEX
*/
public static boolean ipv4PortValidate(String ipv4Port){
return ipv4Validate(ipv4Port,IPV4_PORT_REGEX);
}
private static boolean ipv4Validate(String addr,String regex) {
if(addr == null){
return false;
}
else{
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(addr);
boolean b = m.matches();
return b;
// return Pattern.matches(regex, addr.trim());
}
}
public static void main(String[] args) {
for (int i = 0; i < 65537; i++) {
if(!("" + i).matches(R_1_65535_REGEX))// 校验是否是1-65535的范围内
{
System.out.println(i);
}
}
// TODO
System.out.println();
String udpAddr = "udp:127.0.0.1/655";
// String udpAddr = "udp:127.0.0.1/65535"; //此地址会出错,y?
System.out.println("UdpAddr validates result:" + udpIpv4PortValidate(udpAddr));
String tcpAddr = "tcp:10.8.9.116/10000";
System.out.println("TcpAddr validates result:" + tcpIpv4PortValidate(tcpAddr));
}
}
