Регулярные выражения: Как валидировать URL видео-хостингов (YouTube, Vimeo, Rutube, VK) и запретить вставку ссылок на сторонние ресурсы?

Валидация URL видео-хостингов с помощью регулярных выражений — распространённая задача при разработке форм, CMS и пользовательских редакторов. Ниже разберём подход для четырёх популярных платформ: YouTube, Vimeo, Rutube и VK.

## Принцип работы

Идея проста: составить одно общее регулярное выражение (или набор отдельных), которое разрешает только домены нужных платформ и отклоняет всё остальное.

## Регулярные выражения для каждой платформы

### YouTube
YouTube поддерживает несколько форматов ссылок:
— `https://www.youtube.com/watch?v=VIDEO_ID`
— `https://youtu.be/VIDEO_ID`
— `https://www.youtube.com/embed/VIDEO_ID`

Regex:

^https?://(www.)?(youtube.com/(watch?v=|embed/|v/)|youtu.be/)[w-]{11}(S*)?$

### Vimeo
— `https://vimeo.com/123456789`
— `https://player.vimeo.com/video/123456789`

Regex:

^https?://(www.)?(player.)?vimeo.com/(video/)?d+(/[w-]+)?(?.*)?$

### Rutube
— `https://rutube.ru/video/HASH/`

Regex:

^https?://(www.)?rutube.ru/video/[a-zA-Z0-9]+(/)?$

### VK Видео
— `https://vk.com/video-12345_67890`
— `https://vk.com/video?z=video-12345_67890`

Regex:

^https?://(www.)?vk.com/(video[-d_]+|video?z=video[-d_%]+)$

## Объединённое регулярное выражение

Для удобства можно объединить все паттерны через `|`:

javascript
const videoUrlRegex = /^https?://(www.)?(youtube.com/(watch?v=|embed/)|youtu.be/[w-]{11}|player.vimeo.com/video/d+|vimeo.com/d+|rutube.ru/video/[a-zA-Z0-9]+/|vk.com/(video[-d_]+|video?z=video[-d_%]+))/i;

function isAllowedVideoUrl(url) {
return videoUrlRegex.test(url);
}

## Пример на PHP

php
function isAllowedVideoUrl(string $url): bool {
$pattern = ‘/^https?://(www.)?(youtube.com/(watch?v=|embed/)|youtu.be/[w-]{11}|vimeo.com/d+|player.vimeo.com/video/d+|rutube.ru/video/[a-zA-Z0-9]+/|vk.com/(video[-d_]+|video?z=video[-d_%]+))/i’;
return (bool) preg_match($pattern, $url);
}

## Как запретить сторонние ресурсы

Логика запрета строится на инверсии: если функция `isAllowedVideoUrl()` возвращает `false`, ссылка блокируется. На фронтенде это можно реализовать через обработчик события `input` или `submit`, на бэкенде — через middleware или валидатор формы.

## Важные нюансы

1. **Протокол**: всегда проверяйте наличие `https://` — это защита от XSS через `javascript:` ссылки.
2. **Регистр**: используйте флаг `i` для регистронезависимого сравнения.
3. **Обновляемость**: платформы меняют форматы URL — выносите паттерны в конфиг.
4. **Тестирование**: проверяйте regex на реальных примерах через regex101.com.

Такой подход обеспечивает надёжную белую фильтрацию и не требует сложной логики парсинга URL.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.