【问题标题】:How to check if the string contains a valid vimeo url usng javascript?如何使用javascript检查字符串是否包含有效的vimeo url?
【发布时间】:2013-04-08 17:21:37
【问题描述】:

如何使用 javascript 检查字符串是否包含有效的 vimeo url?

例如:https://vimeo.com/23374724 是一个有效的 url。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    不要依赖 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
      }
    });
    

    【讨论】:

    • 这也是我们采用的方法。唯一的缺点是当提供无效 URL 时,devtools 中会显示 404 响应。
    【解决方案2】:

    试试正则表达式?

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

    如果它以协议开头,则应该要求它是“http://”或“https://”。然后可选地有“www.”。然后有“vimeo.com/”。然后有一系列数字。

    这取决于您想要什么并使其成为可选。我会认为除了“www”之外的一切。应该是必需的,但我不确定您正在接收/测试的输入。要使其成为必需,请从特定组中删除 ?? 位于它影响的组之后)。

    【讨论】:

      【解决方案3】:

      确切地说,我不知道“有效的 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 时不起作用。例如,如果您测试 url vimeo.com/133693532,它将返回 false
      • 如果您想要“至少 8 位”而不是“正好 8 位”,请将 \d{8} 替换为 \d{8,}
      【解决方案4】:

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

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

      视频的 id 将在第 1 组中捕获,如果您需要使用它。您可以在 debuggex 上看到它的实际效果。

      【讨论】:

        猜你喜欢
        • 2012-08-02
        • 2017-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-28
        • 2010-12-19
        相关资源
        最近更新 更多