首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

校验地址有关问题,哪位高手帮找找原因

2013-07-11 
校验地址问题,谁帮找找原因?//

校验地址问题,谁帮找找原因?

//==============================================================================
//
//@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));
}
    
}



如上代码,测试检验是否形如“udp|tcp:xxx.xxx.xxx.xxx/xxx(1-65535)”等的地址是否是有效的,检验"udp:127.0.0.1/655"时没问题,检验"udp:127.0.0.1/65535"时却出错了(单单测试检验1-65535是否有效却没问题),哪位大侠帮忙找找原因?

校验地址有关问题,哪位高手帮找找原因
java
[解决办法]
引用:
难道是String.matches限制了regex的字符串长度?
有道理
反正
String tcpAddr = "tcp:10.8.9.116/655";是true
String tcpAddr = "tcp:10.8.9.116/10000 是false
[解决办法]
不对,我试了一下10.8.9.116/10000,
还是false。
关注。。。。。
[解决办法]
问题找到了:
R_1_65535_REGEX,前后要加括号(内部的括号倒是可以都不需要)。
因为“
[解决办法]
”如果没有括号包裹,就变成了顶级的“或”查找了

热点排行