javascript - 任何验证磁力链接的方法(Javascript)

标签 javascript magnet-uri

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

不是特别在意打开链接等(其他地方已经完成),我在这里更关心清除损坏/chop 的链接。

我能从头顶想到的最好的办法是 magnet:?xt=urn:

的字符串匹配的简单开头

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

最佳答案

我试过上面的正则表达式,但没有用,所以我创建了自己的正则表达式。我看着 Wikipedia Magnet URI scheme其中指出磁铁标识符是 Base32 ,这意味着:

Base32 is a base-32 transfer encoding using the twenty-six letters A-Z and six digits 2-7. [Although my understanding is that these digits and letters can be interpolated at random].

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

  • 单词 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 .

关于javascript - 任何验证磁力链接的方法(Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8227280/

相关文章:

javascript - 为原型(prototype)中的函数创建字符串名称

javascript - setTimeout 将自身作为参数传递

python - 从哈希(或磁力链接)中解析 torrent 的元数据?理想情况下在 python 中

c++ - 如何在 LibTorrent 库中使用磁力链接

javascript - 在 node.js 中缓存数据的最便宜的方法?

javascript - 如何停止覆盖 localStorage 中的数据

javascript - 如何让我的 vert.x 进程退出

python - 在 Python 中使用 Rasterbar libtorrent 加载 Magnet LINK

.net - 与 .NET 和 WPF 的磁力链接

来自 torrent 文件的 Ruby Magnet 链接