Регулярное выражение для ID видео YouTube из URL

Используйте /^(?:https?:\/\/)?(?:www\.|m\.)?(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([\w-]{11})(?:[?&#].*)?$/, чтобы проверить, что вся строка является корректным ID видео YouTube из URL. Каждый пример ниже проверен по этому шаблону, и его можно открыть в Regex Tester с уже загруженными образцами.

Обновлено

/^(?:https?:\/\/)?(?:www\.|m\.)?(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([\w-]{11})(?:[?&#].*)?$/
Открыть в Regex Tester
ВводРезультатГруппы
https://www.youtube.com/watch?v=dQw4w9WgXcQ✓ СовпадениеdQw4w9WgXcQ
https://youtu.be/dQw4w9WgXcQ?t=42✓ СовпадениеdQw4w9WgXcQ
youtube.com/shorts/abcdefghijk✓ Совпадениеabcdefghijk
https://m.youtube.com/watch?v=dQw4w9WgXcQ&list=PL1✓ СовпадениеdQw4w9WgXcQ
https://vimeo.com/123456✗ Нет совпадения
https://www.youtube.com/watch?v=short✗ Нет совпадения
https://youtube.com/@channel✗ Нет совпадения

Как работает шаблон

ЧастьЗначение
(?:https?:\/\/)?(?:www\.|m\.)?Необязательный протокол и поддомен www или m
youtube\.com\/(?:watch\?v=|embed\/|shorts\/)Ссылки watch, embed и Shorts
youtu\.be\/Или короткие ссылки youtu.be
([\w-]{11})Группа 1: 11-символьный ID видео
(?:[?&#].*)?Необязательные дополнительные параметры, например &t=42 или &list=…

Примеры кода

JavaScript

const re = /^(?:https?:\/\/)?(?:www\.|m\.)?(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([\w-]{11})(?:[?&#].*)?$/;
re.test(value); // true or false

Python

import re

bool(re.fullmatch(r'(?:https?://)?(?:www\.|m\.)?(?:youtube\.com/(?:watch\?v=|embed/|shorts/)|youtu\.be/)([\w-]{11})(?:[?&#].*)?', value))

PHP

preg_match('/^(?:https?:\/\/)?(?:www\.|m\.)?(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([\w-]{11})(?:[?&#].*)?$/', $value) === 1;

Примечания и ограничения

Группа 1 содержит ID видео, который можно подставить в https://www.youtube.com/embed/ID или в URL миниатюры https://i.ytimg.com/vi/ID/hqdefault.jpg. Первым параметром в ссылке watch должен быть v=.

Часто задаваемые вопросы

Какое регулярное выражение для ID видео YouTube из URL?
/^(?:https?:\/\/)?(?:www\.|m\.)?(?:youtube\.com\/(?:watch\?v=|embed\/|shorts\/)|youtu\.be\/)([\w-]{11})(?:[?&#].*)?$/ — оно проверяет всю строку целиком. Что делает каждая часть, см. таблицу выше.
Какие примеры подходят?
Из проверенных примеров подходят следующие: https://www.youtube.com/watch?v=dQw4w9WgXcQ, https://youtu.be/dQw4w9WgXcQ?t=42, youtube.com/shorts/abcdefghijk, https://m.youtube.com/watch?v=dQw4w9WgXcQ&list=PL1. Остальные не подходят.
Как протестировать это регулярное выражение?
Нажмите «Открыть в Regex Tester» — шаблон, флаги и примеры текста загрузятся автоматически, а совпадения будут подсвечиваться по мере редактирования.