私は、URLが有効なYouTubeビデオのURLであるかどうかを確認し、そこからYouTubeビデオIDを取得しようとしています。これを達成するために、これまでのところシンプルなJavaScriptスプリット関数を使用していますが、YouTubeには複数のURLがあるため、いくつかの小さな欠点があります。
他のスタックオーバーフロースレッドを表示してきましたが、それらはすべて、1つの特定のURLしかサポートしていないため、必要なものではありません。
これらすべてのURLに一致するものが必要です。
http(s)://www.youtu.be/videoID
http(s)://www.youtube.com/watch?v = videoID
(およびオプションで、スクリプトがYouTubeビデオを含むかどうかをスクリプトが自動的に検出する他の短いURL)
ブラウザですばやく効率的に処理できるアイデアがあれば、大歓迎です。
これを試して:
var url = "...";
var videoid = url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
if(videoid != null) {
console.log("video id = ",videoid[1]);
} else {
console.log("The youtube url is not valid.");
}
正規表現を参照してください:
/
(?:https?:\/{2})? // Optional protocol, if have, must be http:// or https://
(?:w{3}\.)? // Optional sub-domain, if have, must be www.
youtu(?:be)? // The domain. Match 'youtu' and optionally 'be'.
\.(?:com|be) // the domain-extension must be .com or .be
(?:\/watch\?v=|\/)([^\s&]+) //match the value of 'v' parameter in querystring from 'watch' directory OR after root directory, any non-space value.
/
Youtube APIを見て、APIを介してURLを解析することにより、videoIDを取得する方法があるかどうかを確認してください。
これを見てSO post: Youtube API-Extract video ID
これは簡単かもしれません:
var url = 'http://www.youtu.be/543221';
//http://www.youtube.com/watch?v=SNfYz6Yw0W8&feature=g-all-esi would work also
var a = url.split("v=")[1];
a = a != undefined ? a : url.split("youtu.be/")[1];
b = a.split("&")[0];
変数cはあなたのIDを持ちます。早く。正規表現の方が優れていますが、読みにくくなっています。両方を考慮してコードを変更しました。
このコードを試してください
var url = "...";
var videoid = url.match((?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11}));
if(videoid != null) {
console.log("video id = ",videoid[1]);
} else {
console.log("The youtube url is not valid.");
}
正規表現は YouTube動画ID正規表現 からのものです
種類が多すぎます:
http://youtu.be/NLqAF9hrVbY
http://www.youtube.com/embed/NLqAF9hrVbY
https://www.youtube.com/embed/NLqAF9hrVbY
http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
http://www.youtube.com/watch?v=NLqAF9hrVbY
http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo
http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I
http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4
http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY
http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec
http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be
(ソース: 正規表現を使用して文字列内のすべてのYouTubeビデオIDを見つけるにはどうすればよいですか? )最善の方法は、入力データを制限することです。
幸運を
preg_matchを使用して簡単に行うことができます。ここに例を示します。$url = "http://www.youtube.com/watch?v=YzOt12co4nk&feature=g-vrec"; preg_match('/v=([0-9a-zA-Z]+)/', $url, $matches); $vid = $matches[1];
これで、ビデオIDは次のようになります。$ vid = YzOt12co4nk;