最近在编写一个java中间件,其间要用到协议绑定。以便得到的数据能传给有效的URL地址。这就涉及到验证客户端所给的url是否有效的问题。从网上查了查,发现没有太合适的。就结合自己的理解写了些正则表达式。下为例子代码,希望大家能多指出其中的问题。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CheckURL {
private String uri;
public CheckURL(String uri) {
super();
this.uri = uri;
}
/**
* 检验该uri是否合法
* @return
*/
public boolean isValid(){
boolean isValid = false;
//正则表达式检验ip地址
String ipRegex = "((25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d\\d|\\d{1,2}))";
//正则表达式检验域名
String domain = "([0-9a-z][0-9a-z-]*\\.)*[a-z]{2,6}|localhost";
//检验端口
String port = "(:[0-9]{1,4})";
//检验剩余的URL是否合法其中[\u4e00-\u9fa5]表示中文
String remain = "(/[\\w!~*'()\\.;?:@&=+$,%#-[\u4e00-\u9fa5]]*)+/?$";
//该表达式用于检验http格式的URL是否合法
String httpRegex = "^http://"+"("+ipRegex+"|"+domain+")"+port+"?"+remain;
Pattern p = Pattern.compile(httpRegex,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(this.uri);
isValid = m.find();
return isValid;
}
}