我想检查验证 URL 是否允许在 java 中使用通配符。
我发现了一些关于在 java 中验证 URL 的好例子(REGEX,urlValidator),但那些没有提供通配符。
这是我正在练习的内容:
代码(urlValidator)
public void urlValidiTest(){
System.out.println(this.urlCheck("https://www.google.com"));
System.out.println(this.urlCheck("https://google.com"));
System.out.println(this.urlCheck("*.com"));
}
public boolean urlCheck(String url){
return new UrlValidator().isValid(url);
}
输出
真的
真的
错误的
代码(正则表达式)
public void regexTest() {
String[] URLs = new String[] { "http://www.google.com", "http://google.com/","*.com" };
Pattern REGEX = Pattern.compile("(?i)^(?:(?:https?|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$");
for (String url : URLs) {
Matcher matcher = REGEX.matcher(url);
if (matcher.find()) {
System.out.println(matcher.group());
}
}
}
结果
我想要做的是以上所有 URL 都是有效的。
我应该如何解决这个问题?
任何评论将不胜感激。谢谢。
更新
我摆脱了方案部分,并在答案之后将 |* 和 |\.* 添加到域部分(|* 和 |.* 给了我一个错误 - 无效的转义序列(有效的是 \b \t \n \f \r \" \' )-但我不确定更改是否正确)。
现在它不允许“google.com”;但允许其他人(“www.google.com”、“google.com”、“.google.com”、“.com”)
public void regexValidator(String str){
Pattern REGEX = Pattern.compile(""
+ "(?i)^(?:\\S+(?::\\S*)?@)"
+ "?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)"
+ "(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])"
+ "(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|"
//DOMAIN
+ "(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+|\\*)"
+ "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*"
//
+ "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))\\.?)"
+ "(?::\\d{2,5})?(?:[/?#]\\S*)?$");
Matcher _matcher = REGEX.matcher(str);
if(_matcher.find()){
System.out.println("[O] " + str);
}
else {
System.out.println("[X]" + str);
}
}
public void validate(){
System.out.println("TEST START");
this.regexValidator("https://www.google.com");
this.regexValidator("www.google.com");
this.regexValidator("google.com");
this.regexValidator("*.google.com");
this.regexValidator("*.com");
System.out.println("DONE");
}
测试开始
[O] www.google.com
[O] google.com
[O] *.google.com
[O] *.com
完毕
需要帮助吗。谢谢。