嘿我在java中尝试基于What is the best regular expression to check if a string is a valid URL?的网址验证,但由于某种原因它无效。建议?
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class urlValidate {
/**
* @param args
*/
public static void main(String[] args) {
test_url("http://brb/", false);
test_url("https://localserver/projects/public/assets/javascript/widgets/UserBoxMenu/widget.css", false);
test_url("https://www.google.com/", true);
test_url("https://www.google.co.uk/projects/my%20folder/test.php", false);
test_url("https://myserver.localdomain/", true);
test_url("https://192.168.1.120/projects/index.php/", false);
test_url("https://192.168.1.1/", true);
test_url("https://projectpier-server.localdomain/projects/public/assets/javascript/widgets/UserBoxMenu/widget.css", false);
test_url("https://2.4.168.19/project-pier?c=test&a=b", false);
test_url("https://localhost/a/b/c/test.php?c=controller&arg1=20&arg2=20", false);
test_url("https://user:password@localhost/a/b/c/test.php?c=controller&arg1=20&arg2=20", false);
test_url("myserver",false);
test_url("https://tomcat:8080/",true);
test_url("https://facebook.com",false);
}
public static void test_url(String url, boolean expected) {
boolean valid = isURLValid(url, true);
String out = "URL Valid?: " + (valid ? "yes" : "no") + " for URL: "
+ url + ". Expected: " + (expected ? "yes" : "no") + ". ";
if (valid == expected) {
out += "PASS\n";
} else {
out += "FAIL\n";
}
System.out.println(out);
}
public static boolean isURLValid(String url, boolean forcehttps) {
String regex = "";
if (forcehttps) {
regex = "/^(https):\\/\\/";
} else {
regex = "/^(https?):\\/\\/";
}
regex += "((([a-z0-9]\\.|[a-z0-9][a-z0-9-]*[a-z0-9]\\.)*"
+ "[a-z][a-z0-9-]*[a-z0-9]"
+ "|((\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])\\.){3}"
+ "(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])"
+ ")(:\\d+)?)"
+ "(#([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)?(\\/)"
+ "$/i";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(url); // get a matcher object
return m.matches();
}
}
答案 0 :(得分:2)
正则表达式最初用斜杠包装(用作分隔符,这是PHP中PCRE所必需的)。 Java不使用这些。
if (forcehttps) {
regex = "^(https):\\/\\";
} else {
regex = "^(https?):\\/\\";
}
最后的/i
也是不受欢迎的。相反,写
Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE)
答案 1 :(得分:1)
您可以使用Apache commons-validator api。有一个名为 UrlValidator 的类,或者类似的东西
看看这个:http://commons.apache.org/validator/
我不了解很多正则表达式,所以我对这个问题没什么帮助
祝你好运。
答案 2 :(得分:0)
虽然将regex写入URL验证不是问题,但为什么不只是使用java.io.URL
类?只需创建URL
的实例,如下所示:new URL(spec)
如果语法错误,它将抛出MalformedURLExcption
。