9
String[] schemes = {"http","https"};
UrlValidator urlValidator = new UrlValidator(schemes, UrlValidator.ALLOW_ALL_SCHEMES);
System.out.println(urlValidator.isValid(myUrl));

次の URL は無効です。その理由は誰でも知っています。localnet は localnetwork です。しかし、これは他のパブリックネットワークでも機能します (らしい)。

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

以下を使用できます。

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 に答える
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 に答える