将URL与Javascript中给定的URL方案列表进行比较

时间:2011-01-19 18:43:30

标签: javascript

使用JavaScript我想检查给定的URL是否与URL方案列表匹配。我走到这一步:

function on_wikipedia() {
    // the list of allowed locations
    var allowed_locations = new Array( "http://*.wikibooks.org/*"
                                     , "http://*.wikimedia.org/*"
                                     , "http://*.wikipedia.org/*"
                                     , "http://*.wikiquote.org/*"
                                     , "http://*.wikiversity.org/*"
                                     , "http://*.wiktionary.org/*"
                                     , "http://www.mediawiki.org/*"
                                     , "https://secure.wikimedia.org/*"
                                     );

    // current location; e.g. "http://en.wikipedia.org/wiki/Main_Page"
    var current_location = content.document.location;

    var valid = false;

    // compare current_location to allowed_locations and set valid to true,
    // if it matches
    //
    // FIXME

    return valid;
}

这样做也许是一个坏主意。也许我应该使用正则表达式来制作比较器?不幸的是我迷路了...我根本没有JavaScript经验。有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

function onWikipedia(){
  // Untested
  var allowedLocations = /^(?:http:\/\/(?:.+?\.wik(?:ibooks|imedia|ipedia|iquote|iversity|tionary)\.org|www\.mediawiki\.org)\/|https:\/\/secure.wikimedia.org\/)/i;
  return allowedLocations.test( content.document.location );
} 

正则表达式末尾的i使其不区分大小写。如果您不想要,请删除。

一般来说,正则表达式说:

  • 从字符串(^)的前面开始,查找以下任一项((?:...|...)):
    • http://后跟以下任一项,然后是文字斜杠(\/
      • 基本上是任何内容(.+?)后跟一个文字句点(\.),然后是wik,然后是......哦,其中一个域名,后跟{{1} },或
      • .org
    • www.mediawiki.org

请注意,非常宽松的https://secure.wikimedia.org/允许匹配.+?之类的内容。您可能想要更严格的限制,例如字母,数字,下划线,句点或连字符。如果是,请将http://foo.bar.com/?.wikibooks.org/替换为.+?

或者,您可能只想检查主机名:

,而不是针对整个URL进行测试
[\w.-]+?