Android / Java:检查url是否为有效的YouTube链接

8

我希望检查一个URL是否是有效的YouTube URL,以便在视图中显示,否则我将隐藏该视图。

在Java中是否有任何正则表达式可以帮助我检查URL是否有效。目前我正在使用这个正则表达式,但我猜它不是我想要的:

String youTubeURl = "https://www.youtube.com/watch?v=Btr8uOU0BkI";
String pattern = "https?:\\/\\/(?:[0-9A-Z-]+\\.)?(?:youtu\\.be\\/|youtube\\.com\\S*[^\\w\\-\\s])([\\w\\-]{11})(?=[^\\w\\-]|$)(?![?=&+%\\w]*(?:['\"][^<>]*>|<\\/a>))[?=&+%\\w]*";
 if (!youTubeURl.isEmpty() && youTubeURl.matches(pattern)) {
              /// Valid youtube URL
  }
 else{
   // Not Valid youtube URL
}

1
尝试使用URL建立HTTP连接并检查响应代码。 - PKlumpp
5个回答

13

这对我起作用。

public static boolean isYoutubeUrl(String youTubeURl)
{
       boolean success;
       String pattern = "^(http(s)?:\\/\\/)?((w){3}.)?youtu(be|.be)?(\\.com)?\\/.+";
       if (!youTubeURl.isEmpty() && youTubeURl.matches(pattern))
       {
           success = true;
       }
       else
       {
           // Not Valid youtube URL
           success = false;
       }
       return success;
  }

如果你想获取Youtube视频的视频ID,你可以使用以下函数。

public static String getVideoIdFromYoutubeUrl(String youtubeUrl)
{
       /*
           Possibile Youtube urls.
           http://www.youtube.com/watch?v=WK0YhfKqdaI
           http://www.youtube.com/embed/WK0YhfKqdaI
           http://www.youtube.com/v/WK0YhfKqdaI
           http://www.youtube-nocookie.com/v/WK0YhfKqdaI?version=3&hl=en_US&rel=0
           http://www.youtube.com/watch?v=WK0YhfKqdaI
           http://www.youtube.com/watch?feature=player_embedded&v=WK0YhfKqdaI
           http://www.youtube.com/e/WK0YhfKqdaI
           http://youtu.be/WK0YhfKqdaI
        */
       String pattern = "(?<=watch\\?v=|/videos/|embed\\/|youtu.be\\/|\\/v\\/|\\/e\\/|watch\\?v%3D|watch\\?feature=player_embedded&v=|%2Fvideos%2F|embed%\u200C\u200B2F|youtu.be%2F|%2Fv%2F)[^#\\&\\?\\n]*";
       Pattern compiledPattern = Pattern.compile(pattern);
       //url is youtube url for which you want to extract the id.
       Matcher matcher = compiledPattern.matcher(youtubeUrl);
       if (matcher.find()) {
           return matcher.group();
       }
       return null;
}

6
你应该使用

标签


Patterns.WEB_URL.matcher(youTubeURl).matches()

如果URL有效,则返回True,否则返回False。


3
为了实现您想要的,您应该这样使用这个正则表达式:
private static final Pattern youtubePattern = Pattern.compile("^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+");
private boolean isValid = youtubePattern.matcher(youtubeUrl).matches();

youtubeUrl 可以是以下列表中的任何 URL:

该正则表达式可以匹配任何与 youtube.com 相关的 URL 类型。


一些网址已经失效了! - YesThatIsMyName
2
是的,但目的相同,它验证URL是否来自Youtube。 - Roberto Osorio Mc Nulty
1
@RobertoOsorioMcNulty 字符串中的正则表达式应为 "^(http(s)?:\/\/)?((w){3}.)?youtu(be|.be)?(\.com)?\/.+" - NiB

3

使用android.webkit.URLUtil.isValidUrl(java.lang.String)来检查url是否有效。然后您可以检查url是否包含Youtube字符串。

例如:

private boolean isValidUrl(String url) {

    if (url == null) {
        return false;
    }
    if (URLUtil.isValidUrl(url)) {
        // Check host of url if youtube exists
        Uri uri = Uri.parse(url);
        if ("www.youtube.com".equals(uri.getHost())) {
            return true;
        }
        // Other way You can check into url also like 
        //if (url.startsWith("https://www.youtube.com/")) {
            //return true;
        //}
    }
    // In other any case
    return false;
}

这不是一个有效的YouTube网址。 - Pankaj Kumar

1
这段代码并没有检查URL是否有效,它只是检查你的URL中是否包含字符串"youtube"和"youtu.be"。以下是正则表达式。
String yourUrl = "https://youtu.be/Xh0-x1RFEOY";
yourUrl.matches(".*(youtube|youtu.be).*")

"

" .* "在开头和结尾表示您正在检查的表达式(youtube和youtu.be)左右可能有任何内容。

注意:这与URL的有效性无关。

"

2
如果URL中包含“youtube”或“youtu.be”单词,则此方法将无法正常工作。例如,链接到此帖子也会返回true。 - Alex Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接