首页 > 解决方案 > 带有斜杠的 JsFiddle URL 被评估为正确的链接

问题描述

我写了一个评估 JSFiddle 片段 URL 的小方法。

一个有效的 JSFiddle 片段 URL 如下所示:https://jsfiddle.net/BideoWego/y200sqpr/https://jsfiddle.net/BideoWego/y200sqpr

无效的 URL 是其他任何东西。

它似乎运作良好,但出于某种奇怪的原因,它评估https://jsfiddle.net/BideoWego/为真。我怎样才能解决这个问题。

// this should evaluate to false
console.log(checkCourseContentElementCodeFiddleUrl("https://jsfiddle.net/BideoWego/"));

// this should evaluate to true
console.log(checkCourseContentElementCodeFiddleUrl("https://jsfiddle.net/BideoWego/y200sqpr/"));

function checkCourseContentElementCodeFiddleUrl(url) {
    return !!url.match(/((\/\/\/?|https?:\/\/)?(www\.)?jsfiddle\.net\/.+\/.?([?#].*)?)/gi);
  }

标签: javascriptregex

解决方案


我的解决方案是,如果最后一个字符/在正则表达式检查之前将其删除,因此只有在 URL 中有第二个参数时它才会通过。

工作示例

// this should evaluate to false
console.log(checkCourseContentElementCodeFiddleUrl("https://jsfiddle.net/BideoWego/"));

// this should evaluate to true
console.log(checkCourseContentElementCodeFiddleUrl("https://jsfiddle.net/BideoWego/y200sqpr/"));

function checkCourseContentElementCodeFiddleUrl(url) {
  if (url.endsWith("/")) url = url.substring(0, url.length - 1)
  return !!url.match(/((\/\/\/?|https?:\/\/)?(www\.)?jsfiddle\.net\/.+\/.?([?#].*)?)/gi);
}


推荐阅读