Flutter中检测YouTube/Instagram/Facebook/TikTok链接的方法咨询
Flutter 检测YouTube/Instagram/Facebook/TikTok链接的优化方案
你现有代码存在几个需要修正和优化的点:
- TikTok域名拼写错误:把
tiktok.com写成了titok.com,会导致完全无法识别正确的TikTok链接 - Uri匹配逻辑局限:只覆盖了主域名和www子域名,没考虑移动端子域名(比如
m.facebook.com)或其他官方子域名 - YouTube正则可扩展:可以加入对短视频(shorts)链接的支持
以下是优化后的实现方案:
优化后的检测函数
1. YouTube链接检测(正则增强)
覆盖标准视频、短视频、嵌入链接、短链以及带额外参数的链接:
static bool isYouTubeUrl(String url) { final regex = RegExp( r'^(?:https?://)?(?:www\.)?(?:youtube\.com|youtu\.be)/(?:watch\?v=|embed/|v/|shorts/)?([\w-]+)(?:\S*)', caseSensitive: false, ); return regex.hasMatch(url.trim()); }
说明:新增shorts/支持短视频链接,忽略大小写,允许链接末尾携带其他参数。
2. Facebook链接检测(Uri解析优化)
自动匹配所有Facebook官方子域名:
static bool isFacebookUrl(String url) { final uri = Uri.tryParse(url.trim()); return uri != null && uri.host.endsWith('.facebook.com'); }
3. Instagram链接检测(Uri解析优化)
自动匹配所有Instagram官方子域名:
static bool isInstagramUrl(String url) { final uri = Uri.tryParse(url.trim()); return uri != null && uri.host.endsWith('.instagram.com'); }
4. TikTok链接检测(修复拼写+Uri优化)
先修正拼写错误,再匹配所有TikTok官方子域名:
static bool isTikTokUrl(String url) { final uri = Uri.tryParse(url.trim()); return uri != null && uri.host.endsWith('.tiktok.com'); }
可选:统一平台检测函数
如果需要一次性判断链接所属平台,可以封装枚举类型的统一检测函数:
enum SocialPlatform { youtube, facebook, instagram, tiktok, unknown } static SocialPlatform detectSocialPlatform(String url) { final trimmedUrl = url.trim(); if (isYouTubeUrl(trimmedUrl)) return SocialPlatform.youtube; if (isFacebookUrl(trimmedUrl)) return SocialPlatform.facebook; if (isInstagramUrl(trimmedUrl)) return SocialPlatform.instagram; if (isTikTokUrl(trimmedUrl)) return SocialPlatform.tiktok; return SocialPlatform.unknown; }
注意事项
- 处理用户输入时务必先调用
trim(),避免前后空格导致Uri解析失败 - 正则添加了
caseSensitive: false,兼容大小写混合的链接(比如YOUTUBE.COM) - Uri后缀匹配的方式比硬编码域名更灵活,能覆盖所有官方子域名场景
内容的提问来源于stack exchange,提问作者dani
相关产品推荐
相关产品推荐

