【问题标题】:How to compare two urls in javascript or jquery [duplicate]如何在javascript或jquery中比较两个网址[重复]
【发布时间】:2012-08-26 13:36:07
【问题描述】:

可能重复:
Parse URL with Javascript

我想比较 URL 的基本部分。如果我输入了www.websitename.com,如果我输入,它应该说重复

http://www.websitename.com
https://www.websitename.com
websitename.com
http://www.websitename.com/filename
subdomain.websitename.com etc.. 

我该怎么做?

【问题讨论】:

  • 你为什么不切断目录,然后对网站名进行字符串搜索?我错过了一个你不想在这里返回 true 的案例吗?
  • 使用正则表达式获取“://”和“.com”之间的所有内容。然后正常比较两个字符串。
  • :O 看看反对票! 我不介意我在此评论中输入的内容,此帖子肯定会被删除:P

标签: javascript jquery html url


【解决方案1】:

如果您只想比较两个 URL 是否具有相同的域,您可以使用正则表达式轻松编码。

在没有实际获取内容并进行比较的情况下,javascript 无法知道 http://www.websitename.com/http://subdomain.websitename.com/ 是否解析到相同的主机或内容,因为它完全取决于主机实现,可以设置任何一种方式都不是javascript可以知道的。

这是一个从 URL 获取域的函数:

function getDomain(url) {
    var prefix = /^https?:\/\//i;
    var domain = /^[^\/:]+/;
    // remove any prefix
    url = url.replace(prefix, "");
    // assume any URL that starts with a / is on the current page's domain
    if (url.charAt(0) === "/") {
        url = window.location.hostname + url;
    }
    // now extract just the domain
    var match = url.match(domain);
    if (match) {
        return(match[0]);
    }
    return(null);
}

您可以在此处查看每个 URL 的返回内容:http://jsfiddle.net/jfriend00/6YNgp/

【讨论】:

  • 请注意主机名不区分大小写(路径部分可能区分大小写)。
  • @Leo - 好点。我在查找http:// 时添加了不区分大小写的功能。比较返回的域将是该函数的调用者的职责。
  • getDomain("http://foo.com:80") -> "foo.com:80"
  • @Atomosk - 你的评论是什么意思?你能解释一下吗?
  • 对于像http://domain:port 这样的网址,您的方法返回domain:porthttp://domain:80http://domain 基本相同,因为 80 是 http 的默认端口,而 443 是 https 的默认端口。我认为任何阅读答案的人都知道这是件好事。
猜你喜欢
  • 2012-09-02
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
  • 2011-01-23
  • 2021-10-03
  • 1970-01-01
相关资源
最近更新 更多