最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Helper函数:如何禁用禁用词?

运维笔记admin6浏览0评论

Helper函数:如何禁用禁用词?

Helper函数:如何禁用禁用词?

我受命为禁止的用户名添加过滤功能。我创建了一个包含这些名称的庞大列表,并将所有内容分为两部分,一个包含一个完全匹配的列表,另一个包含一个短语/单词匹配列表。

精确匹配可以按预期工作(例如,允许“ admin”,“ adminello”-),但是词组/单词匹配只能以某种方式在句子中找到该单词(例如, “ sh t hello”。我也应该使它成为破折号,“ sh t-hello”,甚至包括“ sh thsh thellosh * t”之类的组合字符串。

我还应该划分列表,因为atm是一个JSON文件,例如:

{
"admin": 1,
"sh*t": 2
}

助手功能(badNamesList-JSON文件)

 module.exports = (options = {}) => {
  return async context => {
    const argumentsList = _.get(context, 'arguments', []);
    const username = _.size(argumentsList) > 1 ? _.get(argumentsList[1], 'username') : null;
    if (username) {
      const exactMatchList = _.map(badNamesList, (name, key) => {
        if (name === 1) return key;
      });
      const phraseMatchList = _.map(badNamesList, (name, key) => {
        if (name === 2) return key;
      });
      if (_.includes(exactMatchList, _.toLower(username))) {
        throw new errors.BadRequest({ fieldErrors: { username: 'forbiddenUsername' } });
      }
      if (_.some(phraseMatchList, name => _.includes(_.map(_.split(username, /-| /), _.toLower), name))) {
        throw new errors.BadRequest({ fieldErrors: { username: 'forbiddenUsername' } });
      }
    }
    return context;
  };
};
回答如下:

任何想法如何正确执行此操作?

您可以使用Levenshtein distance算法。

因此您可以:

  • username转换为小写,将数字更改为字母(例如:0=o)并删除重复的字符串(例如:shitshit
  • 使用隔离词列表查找用户名的距离
  • 如果距离等于或太近,将其阻挡

在这种情况下,您可能会出现假阳性,例如:shotshit的距离为1,但您无需创建“最大无穷大”字典]

发布评论

评论列表(0)

  1. 暂无评论