javascript - 针对字符串测试子字符串数组

标签 javascript arrays node.js express user-agent

我有一组机器人名称。当用户或机器人访问我的网站时,我得到 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 函数不适用于字符串,但适用于 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***'));

关于javascript - 针对字符串测试子字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32455578/

相关文章:

javascript - 将文件拖过区域时更改拖放区域颜色

php - 如果未加载,可替代 WebGL

python - 如何根据第三轴上的所有值从numpy数组中获取掩码

javascript - 如何修复使用 Sequelize Node Express Mysql 插入数据库的问题?

node.js - 使用带 Passport 和 Sequelize 的谷歌社交登录时查询执行多次

node.js - 服务器错误以 express 方式发送给客户端

javascript - javascript的绝对文件路径

javascript - 在 Plottable/D3.js 下制作饼图时出现“<path> 值无效”错误

PHP 拆分字符串并插入 MySQL

java - 通过java邮件发送带有包含byte[]附件的电子邮件