首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只匹配Google的JavaScript函数

只匹配Google的JavaScript函数
EN

Stack Overflow用户
提问于 2008-11-03 20:04:52
回答 9查看 1.5K关注 0票数 2

需要这样的功能:

代码语言:javascript
复制
function isGoogleURL(url) { ... }

返回真正的如果URL属于谷歌。没有假阳性;没有假阴性。

幸运的是,有作为参考:

.google.com .google.ad .google.ae .google.com.af .google.com.ag .google.com.ai .google.am .google.it.ao .google.com.ar .google.as .google.at .google.com.au .google.az .google.ba .google.com.bd .google.be .google.com.bd .google.bg .google.com.bd.google.com.bd.google.bg.google.bg.google.com.bd.google.bg.google.com.bd.google.com.bd.google.bg.google.com.bd.google.bg.google.bg.google.com.bd.google.bg.google.com.bd.google.bg.google.bg.google.com.bd.google.com.bd.google.bg.google.bg.google.com.by .google.com.bz .google.ca .google.cd .google.cg .google.ch .google.ci .google.co.ck .google.cl .google.cn .google.com.co .google.co.cr .google.com.cu .google.cz .google.de .google.dj .google.dj.google.de .google.dk .google.dk.google.de.google.fi .google.com.fj .google.fm .google.fr .google.ge .google.gg .google.com.gh .google.com.gi .google.gl .google.gm .google.gp .google.gr .google.com.gt .google.gy .google.com.hk .google.com.hk .google.hn .google.hr .google.com.hk.google.hr.google.com.hk.google.com.hk.google.hr.google.com.hk.google.hr.google.com.hk.google.com.hk.google.hr.google.hr.google.com.hk.google.hr.google.hr.google.com.hk.google.com.hk.google.hr.google.hr.google.com.hk.google.hr.google.com.hk.google.com.hk.google.hr.google.je .google.com.jm .google.jo .google.co.jp .google.co.ke .google.com.kh .google.ki .google.kg .google.co.kr .google.kz .google.la .google.li .google.lk .google.co.ls .google.lt .google.lt .google.lu .google.lv .google.lt.google.lt.google.lv.google.lv.google.lt.google.lv.google.lv.google.lt.google.lt.google.lv.google.lv.google.lt.google.lv.google.lt.google.lt.google.lv.mw .google.com.mx .google.com.my .google.co.mz .google.com.na .google.com.nf .google.com.ng .google.com.ni .google.nl .google.no .google.com.np .google.nr .google.nu .google.co.nz .google.com.om .google.com.pa .google.com.pe .google.com.om.google.com.om.google.com.pe.google.com.om.google.com.om.google.com.pe.google.com.pe.google.com.py .google.com.qa .google.ro .google.ru .google.rw .google.com.sa .google.com.sb .google.sc .google.se .google.com.sg .google.sh .google.si .google.sk .google.sn .google.sm .google.sm .google.st .google.com.sv .google.sm.google.sm.google.com.sv.google.com.sv.google.sm.google.com.sv.google.com.sv.google.sm.google.sm.google.com.sv.google.com.sv.google.sm.google.sm.google.com.sv.com.tw .google.co.tz .google.com.ua .google.co.ug .google.co.uk .google.com.uy .google.co.uz .google.com.vc .google.co.ve .google.vg .google.co.vi .google.com.vn .google.vu .google.ws .google.rs .google.co.za .google.co.zm .google.co.zm.google.rs.google.co.za.google.rs.google.co.za.google.rs.google.rs.google.co.za.google.vu.google.ws.google.rs.google.co.za.google.ws.google.rs.google.co.za.google.co.za.google.rs.google.co.za.google.co.zm

有什么好办法吗?

澄清:

  • 我需要这样做,因为我编写了一个目前只适用于google.com的greasemonkey脚本(并且应该也适用于所有其他的TLD)。这里是脚本(它修改Google以更好地在宽屏幕上工作)。
  • 它应该在属于上述域(而不是blogger.com等)的URL上工作。
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2008-11-16 18:36:04

下面是Prestaul回答的最新版本,它解决了我在评论中提到的两个问题。

代码语言:javascript
复制
var GOOGLE_DOMAINS = ([
    '.google.com',
    '.google.ad',
    '.google.ae',
    '.google.com.af',
    '.google.com.ag',
    '.google.com.ai',
    '.google.am',
    '.google.it.ao',
    '.google.com.ar',
    '.google.as',
    '.google.at',
    '.google.com.au',
    '.google.az',
    '.google.ba',
    '.google.com.bd'
]).join('\n');

function isGoogleUrl(url) {
    // get the 2nd level domain from the url
    var domain = /^https?:\/\/[^\///]*(google\.[^\/\\]+)\//i.exec(url);
    if(!domain) return false;

    domain = '.'+domain[1];
    // create a regex to check to see if the domain is supported
    var re = new RegExp('^' + domain.replace(/\./g, '\\.') + '$', 'mi');
    return re.test(GOOGLE_DOMAINS);
}

alert(isGoogleUrl('http://www.google.ba/the/page.html')); // true
alert(isGoogleUrl('http://some_mal_site.com/http://www.google.ba/')); // false
alert(isGoogleUrl('https://google.com.au/')); // true
alert(isGoogleUrl('http://www.google.com.some_mal_site.com/')); // false
alert(isGoogleUrl('http://yahoo.com/')); // false
票数 6
EN

Stack Overflow用户

发布于 2008-11-16 19:30:53

所有域都以"google.xx“、"google.co.xx”或"google.com.xx“结尾,但"google.it.ao”和"google.com“除外,因此,如果您只查看域,这个正则表达式在大多数情况下都会工作(它并不完美,但它接受所有列出的域,并拒绝大多数其他恰好包含”google“的有效域):

代码语言:javascript
复制
/^(\w+\.)*google\.((com\.|co\.|it\.)?([a-z]{2})|com)$/i

作为一种功能,您可以这样做:

代码语言:javascript
复制
function isGoogleUrl(url) {
    url = url.replace(/^https?:\/\//i, ''); // Strip "http://" from the beginning
    url = url.replace(/\/.*/, ''); // Strip off the path
    return /^(\w+\.)*google\.((com\.|co\.|it\.)?([a-z]{2})|com)$/i.test(url);
}

如果您使用window.location.hostname,您可以简化它

代码语言:javascript
复制
function isGoogleUrl() {
    return /^(\w+\.)*google\.((com\.|co\.|it\.)?([a-z]{2})|com)$/i.test(window.location.hostname);
}

唯一的办法,这应该允许一个假阳性是如果有一个“谷歌。(其他一些TLD)”。例如,"google.tv“不在列表中(它重定向到google.com),但它会通过。

编辑:像Wimmel指出,它也接受无效域,如"google.com.fr“,但没有列出。它基本上会接受任何"google.whatever“域名。

票数 2
EN

Stack Overflow用户

发布于 2008-11-03 20:11:06

你认为其他谷歌属性是“属于谷歌的”吗?FeedBurner,博客等等?

我能问一下这是什么目的吗?也许有更好的方法来做你想做的事..。如果是合理的话,我可以问你内部的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/259751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档