如何使用 JavaScript 检查字符串是否包含有效的 Vimeo URL?

3
如何使用javascript检查字符串是否包含有效的vimeo网址?
例如:https://vimeo.com/23374724 是一个有效的网址。
4个回答

8

不要仅依赖正则表达式,因为Vimeo经常更改/更新其URL模式。截至2017年10月2日,Vimeo支持六种URL方案。

https://vimeo.com/*
https://vimeo.com/*/*/video/*
https://vimeo.com/album/*/video/*
https://vimeo.com/channels/*/*
https://vimeo.com/groups/*/videos/*
https://vimeo.com/ondemand/*/*

相反,使用他们的API来验证Vimeo URL。这里是oEmbed (文档) API,它接受一个URL,检查其有效性并返回一个带有大量视频信息的对象(请查看开发页面)。虽然不是旨在如此,但我们可以轻松地使用它来验证给定的URL是否来自Vimeo。

因此,使用ajax会像这样:

var VIMEO_BASE_URL = "https://vimeo.com/api/oembed.json?url=";
var yourTestUrl = "https://vimeo.com/23374724";


$.ajax({
  url: VIMEO_BASE_URL + yourTestUrl,
  type: 'GET',
  success: function(data) {
    if (data != null && data.video_id > 0)
      // Valid Vimeo url
    else
      // not a valid Vimeo url
  },
  error: function(data) {
    // not a valid Vimeo url
  }
});

1
这也是我们采取的方法。唯一的缺点是当提供无效的URL时,在devtools中会出现404响应。 - Scott Smith

5

尝试使用正则表达式?

/^(http\:\/\/|https\:\/\/)?(www\.)?(vimeo\.com\/)([0-9]+)$/.test("url");

如果字符串以协议开头,则必须为“http://”或“https://”,然后可选择添加“www.”,接下来是“vimeo.com/”,最后是一系列数字。您可以自行确定要求哪些内容和哪些内容是可选的。我认为除了“www.”之外的所有内容都应该是必需的,但我不确定您接收/测试的输入。如果要求它是必需的,请从具体组中删除“?”(“?”在其影响的组之后)。

2
我不确定“有效的 Vimeo URL”确切意思是什么。如果你想以 https://vimeo.com/ 开头并跟随 8 位数字,那么这个就可以:
var myurl = "https://vimeo.com/23374724";
if (/https:\/\/vimeo.com\/\d{8}(?=\b|\/)/.test(myurl)) { 
    alert("matches"); 
} else { 
    alert("doesn't match") 
};

这段代码有点丑陋,因为它包含了所有的\/转义斜杠,但它的作用是查找我上面提到的字符串,后跟8个数字序列,然后是任何零宽度单词边界或另一个斜杠。


当id位数大于8时无法工作。例如,如果测试网址https://vimeo.com/133693532,则会返回false。 - Sanjay Joshi
1
如果你想要“至少8位数字”而不是“恰好8位数字”,请用\d{8,}替换\d{8} - Scott Mermelstein

1
您可以使用以下正则表达式:

(?:https?\:\/\/)?(?:www\.)?(?:vimeo\.com\/)([0-9]+)

如果需要使用视频的id,则可以在第1组中捕获它。您可以在debuggex上看到其操作过程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接