需要这样的功能:
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
有什么好办法吗?
澄清:
发布于 2008-11-16 18:36:04
下面是Prestaul回答的最新版本,它解决了我在评论中提到的两个问题。
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发布于 2008-11-16 19:30:53
所有域都以"google.xx“、"google.co.xx”或"google.com.xx“结尾,但"google.it.ao”和"google.com“除外,因此,如果您只查看域,这个正则表达式在大多数情况下都会工作(它并不完美,但它接受所有列出的域,并拒绝大多数其他恰好包含”google“的有效域):
/^(\w+\.)*google\.((com\.|co\.|it\.)?([a-z]{2})|com)$/i作为一种功能,您可以这样做:
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,您可以简化它
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“域名。
发布于 2008-11-03 20:11:06
你认为其他谷歌属性是“属于谷歌的”吗?FeedBurner,博客等等?
我能问一下这是什么目的吗?也许有更好的方法来做你想做的事..。如果是合理的话,我可以问你内部的问题。
https://stackoverflow.com/questions/259751
复制相似问题