根据字符串测试子字符串数组

Test array of sub strings against a string

本文关键字:字符串 数组 测试      更新时间:2023-09-26

我有一个机器人名称数组。当用户或bot访问我的站点时,我获得user-agent并想要测试我的数组中的一个值是否存在于其中。

var bots = [
  "twitterbot",
  "linkedinbot",
  "facebookexternalhit",
  "pinterest",
  "dotbot", 
  "rogerbot",
  "googlebot",
  "baiduspider",
  "yahoo! slurp",
  "bot",
  "spider",
  "simplepie",
  "yahooseeker",
  "embedly",
  "quora link preview",
  "outbrain",
  "vkshare",
  "monit",
  "pingability",
  "monitoring",
  "winhttprequest",
  "apache-httpclient",
  "getprismatic.com",
  "python-requests",
  "twurly",
  "yandex",
  "browserproxy",
  "webmeup-crawler",
  "qwantify"
];
var isBot = function(agent){
  return bots.some(function(bot){
    return bot.test(agent);      
  });
}
app.use(function(req, res, next){
  var test = isBot(req.get("user-agent").toLowerCase());
  console.log(test);
});

这给了我错误:TypeError: undefined is not a function

怎么了?如果你能帮助我扩展这个机器人列表,给我一个有用的外部链接或建议一些你自己!

test函数对string不可用,但对RegExp对象不可用。因此,您需要将您的黑名单项定义为regexp,而不是字符串:

    var bots = [
      /twitterbot/,
      /linkedinbot/,
      /facebookexternalhit/,
      /pinterest/,
      /dotbot/,
      /rogerbot/,
      /googlebot/,
      /baiduspider/,
      /yahoo! slurp/,
      /bot/,
      /spider/,
      /simplepie/,
      /yahooseeker/,
      /embedly/,
      /quora link preview/,
      /outbrain/,
      /vkshare/,
      /monit/,
      /pingability/,
      /monitoring/,
      /winhttprequest/,
      /apache-httpclient/,
      /getprismatic.com/,
      /python-requests/,
      /twurly/,
      /yandex/,
      /browserproxy/,
      /webmeup-crawler/,
      /qwantify/
    ];
    
    var isBot = function(agent){
      return bots.some(function(bot){
        return bot.test(agent);      
      });
    };
alert('"clean-user-agent" is bot? ' + isBot('clean-user-agent'));
alert('"the ***twitterbot***" is bot? ' + isBot('the ***twitterbot***'));

try this:

var bots = [
  /twitterbot/,
  /linkedinbot/,
  /facebookexternalhit/,
  /pinterest/,
  /dotbot/,
  /rogerbot/,
  /googlebot/,
  /baiduspider/,
  /yahoo! slurp/,
  /bot/,
  /spider/,
  /simplepie/,
  /yahooseeker/,
  /embedly/,
  /quora link preview/,
  /outbrain/,
  /vkshare/,
  /monit/,
  /pingability/,
  /monitoring/,
  /winhttprequest/,
  /apache-httpclient/,
  /getprismatic.com/,
  /python-requests/,
  /twurly/,
  /yandex/,
  /browserproxy/,
  /webmeup-crawler/,
  /qwantify/
];
var isBot = function(agent){
  for(var b in bots) {
    if(bot[b].test(agent)) {
      return true;
    }     
  } 
  return false;
}