2011-11-22 23 views
2

可能是一個奇怪的問題,但我敢肯定有人曾經想過它:) 我想知道是否有可能驗證給定的字符串是理論上有效的磁鐵鏈接,使用JS。任何方式來驗證磁鐵鏈接(Javascript)

對於打開鏈接等(這在其他地方完成)並不是特別困擾,我在這裏更關心的是清除破碎/截斷的鏈接。

我可以拿出從我的頭頂是字符串匹配的一個簡單的開始爲磁鐵最好?XT =甕:

我想我可以用一個長度條件前言本( 20個以上的角色似乎是合理的?),但是沒有人有更好的解決方案嗎?

回答

4
<!-- 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

1

我能想象的唯一方法是使用正則表達式,而不是簡單的字符串匹配和長度評價。這可以讓你寫出更嚴格的關於磁鐵鏈接形式的規則。

如果你不知道正則表達式,這是開始使用它們的正確時機,它們是非常強大的,它們是每個程序員(無論他感興趣的語言)的「工具箱」中的必備條件。

Here is一個起點,但是你可以在網上找到大量的文檔。

+0

您可以找到需要的有關維基百科頁面上URI格式的信息,但這是一項艱鉅的任務。 – Viruzzo

+0

是的,我有點害怕我不得不在問題上解決一個令人討厭的大小的正則表達式:S(我的正則表達式知識並不差,但也不好),儘管我希望以前有人可能會想到它,或者更好一點的東西。 #1解決方案基本上是我正在考慮寫出來的,但是在磁鐵規格中排在#4之後的任何東西都會落後(http://magnet-uri.sourceforge.net/magnet-draft-overview.txt) – leezer3

+0

最大我猜想的麻煩是,我無法輕易識別磁鏈的端點,因爲它們可以包含任何東西。可能需要實現對一些主要的BT網站中發現磁鐵格式的正則表達式的工作,然後按個別情況確定...... – leezer3

1

我試過上面的正則表達式,它沒有工作,所以我創建了我自己的。我看着其中指出所述磁體標識符是Base32Wikipedia Magnet URI scheme,這意味着:

Base32是使用26字母A-Z和六位數字2-7的基-32傳輸編碼。 [雖然我的理解是這些數字和字母可以隨機插入]

其結果是,我們正在尋找一個正則表達式如下:

  • 字磁鐵一個分號,一個問號和一個「XT =甕:」字符串
    • /magnet:\?xt=urn:
  • 任何數量的字符串/數字到下一個分號(這個問題的正則表達式失敗這一點)
      內插的信
    • [a-z0-9]+:
  • 從上面我們的研究,32個字符(base32)和數字
    • [a-z0-9]{32}/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

0

JFYI,我發現了一個類似的問題幾天前,我發現磁鐵是區分大小寫的,必須大寫(與氾濫小組證實),因此在驗證時必須爲A-Z,而不是A-Z。

更多信息上:deluge bug track

同時氾濫的團隊解決它,我打算寫一個Chrome擴展來解決它,不過我有點布西現在:)

+0

這似乎是一個更比一個答案評論。請不要發表評論作爲答案;相反,等到你有50個代表,這樣你才能發表評論。 –

+0

「評論」也是答案,他們驗證錯誤,必須是A-Z,而不是a-z :) – Marcos