9
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
4

7 回答 7

5

您正在使用的类已弃用。替换是

org.apache.commons.validator.routines.UrlValidator

哪个更灵活。您可以将标志 ALLOW_LOCAL_URLS 传递给构造函数,这将允许大多数地址,如您正在使用的地址。在我们的例子中,我们在地址之前有身份验证数据,因此我们必须使用更加灵活的UrlValidator(RegexValidator authorityValidator, long options)构造函数。

于 2013-04-17T18:30:29.597 回答
4

正如我所想的那样,它在顶级水平上失败了;

String topLevel = domainSegment[segmentCount - 1];
if (topLevel.length() < 2 || topLevel.length() > 4) {
  return false;
}

你的最高级别是localnet.

于 2012-11-08T12:35:09.947 回答
1

这在 Apache Validator 的 1.4.1 版本中得到了修复:

https://issues.apache.org/jira/browse/VALIDATOR-342 https://issues.apache.org/jira/browse/VALIDATOR/fixforversion/12320156

简单升级到最新版本的验证器应该可以很好地解决问题。

于 2015-08-17T19:20:24.533 回答
0

检查第2行它应该是

new UrlValidator(schemes);

如果您想允许 2 个斜线并禁止片段

new UrlValidator(schemes, ALLOW_2_SLASHES + NO_FRAGMENTS);
于 2012-11-08T12:23:54.287 回答
0

这是isValid(String)方法的源代码:

您可以通过手动调用检查每个步骤的结果,以了解失败的地方。

于 2012-11-08T12:24:53.937 回答
0

库方法在此 URL 上失败:

  "http://en.wikipedia.org/wiki/3,2,1..._Frankie_Go_Boom"

这是完全合法的(和现有的)URL。

我通过反复试验发现以下代码更准确:

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;  
}
于 2013-09-30T11:30:10.813 回答
0

您可以使用以下内容:

UrlValidator urlValidator = new UrlValidator(schemes, new RegexValidator("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$"), 0L);
于 2014-10-23T17:39:58.853 回答