【发布时间】:2013-04-08 17:21:37
【问题描述】:
如何使用 javascript 检查字符串是否包含有效的 vimeo url?
例如:https://vimeo.com/23374724 是一个有效的 url。
【问题讨论】:
标签: javascript regex
如何使用 javascript 检查字符串是否包含有效的 vimeo url?
例如:https://vimeo.com/23374724 是一个有效的 url。
【问题讨论】:
标签: javascript regex
不要依赖 Regex,因为 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 (doc) 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
}
});
【讨论】:
试试正则表达式?
/^(http\:\/\/|https\:\/\/)?(www\.)?(vimeo\.com\/)([0-9]+)$/.test("url");
如果它以协议开头,则应该要求它是“http://”或“https://”。然后可选地有“www.”。然后有“vimeo.com/”。然后有一系列数字。
这取决于您想要什么并使其成为可选。我会认为除了“www”之外的一切。应该是必需的,但我不确定您正在接收/测试的输入。要使其成为必需,请从特定组中删除 ?(? 位于它影响的组之后)。
【讨论】:
确切地说,我不知道“有效的 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 位数字序列,后跟任何零宽度字边界或另一个正斜杠。
【讨论】:
\d{8} 替换为 \d{8,}。
您可以使用以下正则表达式:
(?:https?\:\/\/)?(?:www\.)?(?:vimeo\.com\/)([0-9]+)
视频的 id 将在第 1 组中捕获,如果您需要使用它。您可以在 debuggex 上看到它的实际效果。
【讨论】: