You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.9 KiB
60 lines
1.9 KiB
import java.util.regex.Pattern;
|
|
|
|
public class UrlFormatException extends RuntimeException {
|
|
private final String invalidUrl;
|
|
|
|
public UrlFormatException(String message, String invalidUrl) {
|
|
super(message);
|
|
this.invalidUrl = invalidUrl;
|
|
}
|
|
|
|
public UrlFormatException(String message, String invalidUrl, Throwable cause) {
|
|
super(message, cause);
|
|
this.invalidUrl = invalidUrl;
|
|
}
|
|
|
|
public String getInvalidUrl() {
|
|
return invalidUrl;
|
|
}
|
|
}
|
|
|
|
class UrlValidator {
|
|
private static final Pattern URL_PATTERN = Pattern.compile("^(https?|http)://[\\w-]+(\\.[\\w-]+)+([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?$");
|
|
|
|
public static void validate(String url) {
|
|
if (url == null || url.isBlank()) {
|
|
throw new UrlFormatException("URL不能为空", url);
|
|
}
|
|
if (!URL_PATTERN.matcher(url).matches()) {
|
|
throw new UrlFormatException("URL格式不合法,仅支持http/https协议", url);
|
|
}
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
System.out.println("=== 测试 URL 校验 ===");
|
|
|
|
System.out.println("\n空URL校验:");
|
|
try {
|
|
UrlValidator.validate(null);
|
|
} catch (UrlFormatException e) {
|
|
System.out.println(" 异常: " + e.getMessage());
|
|
System.out.println(" 无效URL: " + e.getInvalidUrl());
|
|
}
|
|
|
|
System.out.println("\n非法URL校验:");
|
|
try {
|
|
UrlValidator.validate("ftp://example.com");
|
|
} catch (UrlFormatException e) {
|
|
System.out.println(" 异常: " + e.getMessage());
|
|
System.out.println(" 无效URL: " + e.getInvalidUrl());
|
|
}
|
|
|
|
System.out.println("\n正确URL校验:");
|
|
try {
|
|
UrlValidator.validate("https://www.example.com/page");
|
|
System.out.println(" 通过");
|
|
} catch (UrlFormatException e) {
|
|
System.out.println(" 异常: " + e.getMessage());
|
|
}
|
|
}
|
|
}
|
|
|