64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
/**
|
|
* Regular expression for matching YouTube video IDs in various URL formats
|
|
*/
|
|
const VIDEO_ID_REGEX = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})/i;
|
|
|
|
/**
|
|
* Regular expression for matching standalone YouTube video IDs
|
|
*/
|
|
const SHORT_URL_REGEX = /^[a-zA-Z0-9_-]{11}$/;
|
|
|
|
/**
|
|
* Extracts the video ID from a YouTube URL or returns the input if it's already a video ID.
|
|
* @param {string} input - The YouTube URL or video ID
|
|
* @returns {string|null} The extracted video ID or null if invalid
|
|
*/
|
|
export function extractVideoId(input) {
|
|
if (!input) return null;
|
|
|
|
// If it's already a valid video ID, return it
|
|
if (isValidVideoId(input)) {
|
|
return input;
|
|
}
|
|
|
|
// Try to extract video ID from URL
|
|
const match = input.match(VIDEO_ID_REGEX);
|
|
return match ? match[1] : null;
|
|
}
|
|
|
|
/**
|
|
* Validates if the input is a valid YouTube video ID.
|
|
* @param {string} input - The video ID to validate
|
|
* @returns {boolean} True if the input is a valid video ID
|
|
*/
|
|
export function isValidVideoId(input) {
|
|
if (!input) return false;
|
|
return SHORT_URL_REGEX.test(input);
|
|
}
|
|
|
|
/**
|
|
* Validates if the input is a valid YouTube URL or video ID.
|
|
* @param {string} input - The URL or video ID to validate
|
|
* @returns {boolean} True if the input is a valid YouTube URL or video ID
|
|
*/
|
|
export function isValidYouTubeUrlOrId(input) {
|
|
if (!input) return false;
|
|
|
|
// Check if it's a valid video ID
|
|
if (isValidVideoId(input)) {
|
|
return true;
|
|
}
|
|
|
|
// Check if it's a valid YouTube URL
|
|
return VIDEO_ID_REGEX.test(input);
|
|
}
|
|
|
|
/**
|
|
* Builds a YouTube embed URL from a video ID.
|
|
* @param {string} videoId - The YouTube video ID
|
|
* @returns {string} The YouTube embed URL
|
|
*/
|
|
export function buildEmbedUrl(videoId) {
|
|
if (!videoId) return '';
|
|
return `https://www.youtube.com/embed/${videoId}`;
|
|
}
|