videoId всегда содержит
11 символов и всегда будет заканчиваться одним из следующих символов:
A, E, I, M, Q, U, Y, c, g, k, o, s, w, 0, 4, 8
Таким образом, регулярное выражение (RegEx) для
videoId будет выглядеть следующим образом:
[\w-]{10}[AEIMQUYcgkosw048]{1}
И так как вариантов ссылок на видеоролик может быть много, то не всегда подойдёт парсинг
URL (parse_url, parse_str итп), поэтому лучше использовать регулярное выражение в этом случае
function getVideoID ($url)
{
preg_match("%^(?:https?://)?(?:www\.|m\.)?(?:youtu\.be/|youtube(?:-nocookie)?\.com(?:/watch\?v=|/watch/\?v=|/embed/|/v/))([\w-]{10}[048AEIMQUYcgkosw]{1})($|\S+).*$%x", $url, $matches);
return $matches[1] ?? "";
}
echo getVideoID("https://youtu.be/DBXH9jJRaDk?t=11");
//DBXH9jJRaDk
echo getVideoID("https://www.youtube.com/embed/DBXH9jJRaDk");
//DBXH9jJRaDk
echo getVideoID("https://www.youtube.com/watch?v=DBXH9jJRaDk&t=30&feature=emb_logo");
//DBXH9jJRaDk
echo getVideoID("https://www.youtube.com/watch?v=DBXH9jJRaDk");
//DBXH9jJRaDk
echo getVideoID("https://m.youtube.com/watch?v=DBXH9jJRaDk&t=30");
//DBXH9jJRaDk