You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发YouTube视频插入插件:需完善地址验证(含视频ID检测)

解决YouTube视频地址的ID检测问题

嘿,我来帮你搞定视频ID的检测逻辑!YouTube的URL格式有好几种,得先理清这些格式里ID的位置,再用正则表达式来精准捕获,结合你已经实现的域名检测,就能完成完整的验证啦。

先明确YouTube常见的URL格式及ID位置

YouTube的视频地址主要有这几种常见形式,ID的位置各有不同:

  • 标准播放页:https://www.youtube.com/watch?v=abc123XYZ → ID是abc123XYZ(v=后面的11位字符)
  • 短链接:https://youtu.be/abc123XYZ → ID是斜杠后面的11位字符
  • 嵌入地址:https://www.youtube.com/embed/abc123XYZ → ID是embed/后面的11位字符
  • Shorts短视频:https://www.youtube.com/shorts/abc123XYZ → ID是shorts/后面的11位字符

官方规定视频ID是11位字符,由字母、数字、下划线_和连字符-组成,这是我们检测的核心依据。

用正则表达式捕获视频ID

我给你写一个通用的正则表达式,能覆盖上面所有的URL格式,精准提取出视频ID:

/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})/i

这里的i修饰符是用来忽略URL大小写的(比如有的用户输入YOUTUBE.COM也能匹配),各个部分的作用:

  • (?:youtube\.com\/...):匹配youtube.com域名下的各种路径结构,包括watch页、embed页、shorts页等
  • youtu\.be\/:匹配短链接的域名部分
  • ([^"&?\/\s]{11}):捕获11位不包含特殊符号的字符,这就是我们要的视频ID

结合域名检测的完整验证逻辑

把你现有的域名检测和ID检测结合起来,下面给你两个常用语言的实现示例:

JavaScript示例

function isValidYouTubeUrl(url) {
    // 第一步:检测域名(你已经实现的部分)
    const hasValidDomain = url.includes('youtube.com') || url.includes('youtu.be');
    if (!hasValidDomain) return false;

    // 第二步:检测并提取视频ID
    const youtubeRegex = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})/i;
    const matchResult = url.match(youtubeRegex);
    
    // 验证是否提取到11位的有效ID
    return matchResult !== null && matchResult[1].length === 11;
}

// 测试一下:
console.log(isValidYouTubeUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ")); // true
console.log(isValidYouTubeUrl("https://youtu.be/dQw4w9WgXcQ")); // true
console.log(isValidYouTubeUrl("https://example.com/video")); // false
console.log(isValidYouTubeUrl("https://youtube.com/watch?v=short")); // false(ID长度不够)

PHP示例

function isValidYouTubeUrl($url) {
    // 第一步:检测域名
    $hasValidDomain = str_contains($url, 'youtube.com') || str_contains($url, 'youtu.be');
    if (!$hasValidDomain) return false;

    // 第二步:检测并提取视频ID
    $youtubeRegex = '/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/\s]{11})/i';
    preg_match($youtubeRegex, $url, $matches);
    
    // 验证ID有效性
    return isset($matches[1]) && strlen($matches[1]) === 11;
}

// 测试:
var_dump(isValidYouTubeUrl("https://www.youtube.com/embed/dQw4w9WgXcQ")); // bool(true)
var_dump(isValidYouTubeUrl("https://youtube.com/shorts/dQw4w9WgXcQ")); // bool(true)
var_dump(isValidYouTubeUrl("https://google.com")); // bool(false)

额外注意点

  • 如果你的插件需要处理带额外参数的URL(比如&t=30s、&list=XXX),这个正则会自动忽略后面的参数,只提取核心的视频ID,完全不影响验证。
  • 要是遇到极个别非标准的YouTube URL,你可以根据实际情况微调正则的匹配规则,不过上面的正则已经覆盖了绝大多数用户会用到的场景啦。

内容的提问来源于stack exchange,提问作者Wojciech Urbaniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:01:12