如何使用jQuery检查有效的Youtube链接

11

我想在Jquery中仅检查来自YouTube的特定网址,并显示成功状态,对于其他网址,我想通过将其标记为无效网址来跳过它们。

var _videoUrl = "youtube.com/watch?v=FhnMNwiGg5M";
if (_videoUrl.contains("youtube.com"))
{
  alert('Valid'); 
} 
else
{ 
  alert('Not Valid');
} 

如何使用contains进行检查,或者其他选项以仅检查有效的YouTube网址。


1
你说的“valid”是什么意思?是指URL格式正确,还是链接中实际上有一个视频? - mpen
8个回答

11

我从闭包库中找到了这个,可能会很方便:

/**
 * A youtube regular expression matcher. It matches the VIDEOID of URLs like
 * http://www.youtube.com/watch?v=VIDEOID.
 * @type {RegExp}
 * @private
 */
goog.ui.media.YoutubeModel.matcher_ =
    /https?:\/\/(?:[a-zA_Z]{2,3}.)?(?:youtube\.com\/watch\?)((?:[\w\d\-\_\=]+&(?:amp;)?)*v(?:<[A-Z]+>)?=([0-9a-zA-Z\-\_]+))/i;

2
youtu.be 短链接怎么办? - andrewtweber

8
今日免费次数已满, 请开通会员/明日再来
var matches = _videoUrl.match(/watch\?v=([a-zA-Z0-9\-_]+)/);
if (matches)
{
    alert('valid');
}

当然,正则表达式可以扩展到包括整个YouTube链接,但如果您只需要ID,则这是我发现的最可靠的方法。


1
不要忘记视频ID始终为11个字符长度...您必须检查视频ID的长度是否为11。 - Buhake Sindi
4
知道了,虽然我倾向于允许任何长度,因为如果他们用完ID,ID长度可能会发生变化。 - Soviut
1
来自YouTube开发者的话称,他们不保证保持11个字符长度:链接 - Áxel Costas Pena
1
@ÁxelCostasPena是对的-即使他们没有明确说明- 52036560683837093888(52万亿)似乎是一个很大的数字,但由于越来越多的人使用YouTube,越来越多的人上传视频...还有YouTube将陪伴我们相当长的时间...我们在几年内就会轻松耗尽这个范围内的链接 :) ...(我考虑了a-z,A-Z,0-9) - jave.web
可能需要指出的是,由于这是一个较旧的答案,它没有考虑到YouTube的新的简写URL样式,例如 youtu.be/JQ24UHbhFM8。 - FoxMulder900
显示剩余3条评论

2

您可以尝试使用正则表达式:

var url = 'youtube.com/watch?v=FhnMNwiGg5M';
var isyouTubeUrl = /((http|https):\/\/)?(www\.)?(youtube\.com)(\/)?([a-zA-Z0-9\-\.]+)\/?/.test(url);

1

我会提供一些额外的内容:

对于YoutubeVimeo,检查这些ID是否真的有效。

var GoogleKey = 'XXXXXXXXXX';
function GetVideoById(id) {
    var site = !isNaN(id) ? 'vimeo' : 'youtube';
    var data = false;
    if(site==='youtube') {
        $.ajax({
            async: false,
            url: 'https://www.googleapis.com/youtube/v3/videos?id='+id+'&key='+GoogleKey+'&part=snippet',
            success: function(r) {
                if(r['items'].length) {
                    data = {'type':'youtube','data':r['items'][0]['snippet']};
                }
            }
        });
    } else {
        $.ajax({
            async: false,
            url: 'http://vimeo.com/api/v2/video/'+id+'.json',
            success: function(r) {
                data = {'type':'vimeo','data':r[0]};
            }
        });
    }
    return data;
}

所以例子运行:
if(GetVideoById('YykjpeuMNEk')) {
   // youtube + data
}

if(GetVideoById('162334918')) {
   // vimeo + data
}
if(GetVideoById('999999')) {
   // nothing (because false)
}
if(GetVideoById('abcdefg')) {
   // nothing (because false)
}

0
假设您想要的是YouTube视频URL而不是任何YouTube URL,您可以使用正则表达式来实现:
var url = 'youtube.com/watch?v=FhnMNwiGg5M';
var matches = url.match(/^(https?:\/\/)?([^\/]*\.)?youtube\.com\/watch\?([^]*&)?v=\w+(&[^]*)?/i);

0
you Want to validate your URL:

Please pass the URL in this function then this will give you true OR false
See Function :
<script>
function isValidUrl(s) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
    return regexp.test(s);
}

isValidUrl(yourURL);
</script>

这仅仅检查URL是否有效。 - lolc

0

您可以使用.indexOf()检查URL是否包含单词“http://www.youtube.com

var url = 'http://www.youtube.com/channel/UChh-akEbUM8_6ghGVnJd6cQ';
if (url.indexOf('http://www.youtube.com') > -1) {
  alert( "true");
} else {
  alert( "false");
}

0
var regexp = /^(?:https?:\/\/)?(?:www\.)?youtube\.com\/watch\?(?=.*v=((\w|-){11}))(?:\S+)?$/;

var matches_array = video_url.match(regexp);

if(matches_array == null)

{

                alert("Enter youtube url");

                return false;

}

仅翻译以下与编程有关的内容:这将仅匹配youtube.com链接 - lolc

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