【问题标题】:Android / Java: Check if url is valid youtube urlAndroid / Java:检查 url 是否有效 youtube url
【发布时间】:2014-07-24 17:12:37
【问题描述】:

我想检查一个 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
}

【问题讨论】:

  • 尝试与 url 建立 http-connection 并检查响应代码

标签: java android regex youtube


【解决方案1】:

这对我有用。

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 videoId,可以使用以下函数。

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;
}

【讨论】:

    【解决方案2】:

    为了实现你想要的,你应该像这样使用这个正则表达式:

    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

    【讨论】:

    • 部分网址已失效!
    • 是的,但是目的是一样的,就是验证URL是否来自Youtube
    • @RobertoOsorioMcNulty 字符串中的正则表达式应该是 "^(http(s)?:\\/\\/)?((w){3}.)?youtu(be|.be) ?(\\.com)?\\/.+"
    【解决方案3】:

    这不会检查 URL 是否有效。它仅在您的 URL 中检查字符串“youtube”和“youtu.be”。以下是正则表达式

    String yourUrl = "https://youtu.be/Xh0-x1RFEOY";
    yourUrl.matches(".*(youtube|youtu.be).*")
    

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

    注意:这与网址的有效性无关

    【讨论】:

    • 如果您的网址中有“youtube”或“youtu.be”字样,这将不起作用。例如,指向此帖子的链接也返回 true
    【解决方案4】:

    使用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;
    }
    

    【讨论】:

    • 在这种情况下“youtu.be/zuf8A0udHrs”呢?我无法从 url 获取 YouTube 视频 ID。
    • 这不是一个有效的 youtube 网址。
    【解决方案5】:

    你应该使用

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

    如果 URL 有效则返回 True,如果 URL 无效则返回 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2011-06-21
      • 2020-11-29
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      相关资源
      最近更新 更多