【问题标题】:Any way to verifiy a magnet link (Javascript)验证磁力链接的任何方式(Javascript)
【发布时间】:2011-11-22 13:04:18
【问题描述】:

可能是一个奇怪的问题,但我敢肯定之前有人想过 :) 我想知道是否有可能使用 JS 将给定的字符串验证为理论上有效的磁铁链接。

没有特别在意打开链接等。(在其他地方做过),我更关心的是清除损坏/截断的链接。

我能想到的最好的方法是 magnet:?xt=urn:

的字符串匹配的简单开头

我想我可以在前面加上一个长度条件(20+ 个字符似乎很合理?),但是有人有“更好”的解决方案吗?

【问题讨论】:

    标签: javascript magnet-uri


    【解决方案1】:
    <!-- HTML -->
    <div id="link">magnet:?xt=urn:3216546465987dfgs9798</div>
    

    JavaScript:

    var magnet_link = document.getElementById('link').innerHTML;
    
    if (magnet_link.match(/magnet:\?xt=urn:[a-z0-9]{20,50}/i) != null) {
        alert('Link is valid');
    }
    

    短:

    ("magnet:?xt=urn:3216546465987dfgs9798".match(/magnet:\?xt=urn:[a-z0-9]{20,50}/i) != null)
    

    Wikipedia about Magnet URI scheme

    【讨论】:

      【解决方案2】:

      我尝试了上面的正则表达式,但它不起作用,所以我创建了自己的。我看了Wikipedia Magnet URI scheme,上面写着磁铁标识符是Base32,意思是:

      Base32 是使用 26 个字母 A-Z 和 6 个数字 2-7 的 base-32 传输编码。 [虽然我的理解是这些数字和字母可以随意插值].

      因此,我们在正则表达式中寻找以下内容:

      • magnet 一词后跟分号、问号和“xt=urn:”字符串
        • /magnet:\?xt=urn:
      • 直到下一个分号的任意数量的字符串/数字(问题的正则表达式失败)
        • [a-z0-9]+:
      • 根据我们上面的研究,32 个字符(base32)的插值字母和数字
        • [a-z0-9]{32}/i

      开头/ 和结尾/ 必须在那里,因为它是一个正则表达式,表示开始和结束,而末尾的i (/i) 表示不区分大小写的正则表达式.如果我们不执行/i,我们将不得不检查[a-zA-Z0-9]

      实际工作的最终正则表达式如下:

      /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
      

      你可以自己试试这个:

      var torrent = "magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C";
      
      if (torrent.match(/magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i) !== null)
      {
          console.log("It's valid, bloody fantastic!");
      }
      

      Obligatory JSFiddle.

      【讨论】:

        【解决方案3】:

        我能想象的唯一方法是使用正则表达式而不是简单的字符串匹配和长度评估。这将允许您编写有关磁力链接形式的更严格的规则。

        如果您不了解正则表达式,这是开始使用它们的最佳时机,它们非常强大,并且是每个程序员(无论他对什么语言感兴趣)的“工具箱”中必不可少的。

        Here is 是一个起点,但是您可以在网上找到大量文档。

        【讨论】:

        • 您可以在 Wikipedia 页面上找到有关 URI 格式的必要信息,但这是一项相当艰巨的任务。
        • 是的,我有点担心我不得不在这个问题上开一个讨厌的大小正则表达式:S(我的正则表达式知识还不错,但也不是很好),虽然我希望有人之前可能已经想到了,或者更好一些。 #1解决方案基本上是我想写出来的,但这落在磁铁规格中#4之后的任何东西(magnet-uri.sourceforge.net/magnet-draft-overview.txt
        • 我想最大的麻烦是我无法轻松识别磁力链接的端点,因为它们几乎可以包含任何东西。可能需要为一些主要的种子网站上找到的磁铁格式实现一个工作正则表达式,然后根据具体情况进行修复......
        【解决方案4】:

        JFYI,我前几天发现了一个类似的问题,我发现磁铁是区分大小写的,必须大写(与 deluge 团队确认),所以验证必须是 A-Z,而不是 a-z。

        更多信息:deluge bug track

        同时 deluge 团队正在修复它,我正计划编写一个 chrome 扩展来修复它,但我现在有点忙 :)

        【讨论】:

        • 这似乎更像是一个评论而不是一个答案。请不要发布 cmets 作为答案;相反,等到你有 50 个代表,这样你就可以离开 cmets。
        • “评论”也是一个答案,他们验证错误,必须是 A-Z,而不是 a-z :)
        猜你喜欢
        • 2022-06-17
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 2012-07-11
        • 2013-10-22
        相关资源
        最近更新 更多