Я попробовал приведенное выше регулярное выражение, и оно не сработало, поэтому я создал свое собственное.Я посмотрел на схему URI магнита Википедии , в которой говорится, что идентификатор магнита равен Base32 , что означает:
Base32 - это кодировка передачи base-32 сдвадцать шесть букв А-Я и шесть цифр 2-7. [Хотя я понимаю, что эти цифры и буквы можно интерполировать случайным образом] .
В результате мы ищем следующее в регулярном выражении:
- Магнит слова, за которым следуют точка с запятой, знак вопроса и строка «xt = urn:»
- Любое количество строк/ числа до следующей точки с запятой (регулярное выражение вопроса не соответствует этому)
- Из нашего исследования выше, 32 символа (base32) интерполированных букви цифры
Должно быть начало /
и окончание /
, поскольку это регулярное выражение для обозначенияначало и конец, а 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!");
}
Обязательный JSFiddle .