String[] schemes = {"http","https"};
UrlValidator urlValidator = new UrlValidator(schemes, UrlValidator.ALLOW_ALL_SCHEMES);
System.out.println(urlValidator.isValid(myUrl));
以下网址表示无效。任何人都知道为什么会这样。 localnet是一个本地网络。但这适用于任何其他公共网络(似乎)。
http://aunt.localnet/songs/barnbeat.ogg
答案 0 :(得分:4)
您正在使用的课程已弃用。替换是
org.apache.commons.validator.routines.UrlValidator
哪个更灵活。您可以将标志ALLOW_LOCAL_URLS传递给构造函数,该构造函数允许大多数地址,例如您正在使用的地址。在我们的例子中,我们在地址之前有认证数据,因此我们必须使用更加灵活的UrlValidator(RegexValidator authorityValidator, long options)构造函数。
答案 1 :(得分:3)
正如我所想,它在顶层失败;
String topLevel = domainSegment[segmentCount - 1];
if (topLevel.length() < 2 || topLevel.length() > 4) {
return false;
}
您的最高级别为localnet
。
答案 2 :(得分:1)
这已在Apache Validator的1.4.1版本中修复:
https://issues.apache.org/jira/browse/VALIDATOR-342 https://issues.apache.org/jira/browse/VALIDATOR/fixforversion/12320156
简单升级到最新版本的验证器应该很好地解决问题。
答案 3 :(得分:0)
检查第2行 它应该是
new UrlValidator(schemes);
如果你想允许2个斜杠并禁止片段
new UrlValidator(schemes, ALLOW_2_SLASHES + NO_FRAGMENTS);
答案 4 :(得分:0)
以下是isValid(String)方法的源代码:
您可以通过手动调用检查每个步骤的结果,以了解失败的位置。
答案 5 :(得分:0)
此方法的库方法失败:
"http://en.wikipedia.org/wiki/3,2,1..._Frankie_Go_Boom"
这是完全合法的([和现有的] URL(尝试一下,StackOverflow的对话框不接受它,但如果你复制粘贴到你的浏览器,你会看到一个维基百科页面)
我通过反复试验发现以下代码更准确:
public static boolean isValidURL(String url)
{
URL u = null;
try
{
u = new URL(url);
}
catch (MalformedURLException e)
{
return false;
}
try
{
u.toURI();
}
catch (URISyntaxException e)
{
return false;
}
return true;
}
答案 6 :(得分:0)
您可以使用以下内容:
UrlValidator urlValidator = new UrlValidator(schemes, new RegexValidator("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"), 0L);