Мне было поручено добавить функцию фильтрации запрещенных имен пользователей.Я создал огромный список этих имен и разделил все на две части, одна из которых содержит список точных совпадений, другая - список совпадений фраз / слов.
Точное совпадение работает как задумано (например, "admin "," adminello "- разрешено), но соответствие фразы / слова работает только в том случае, если это слово найдено в предложении, например," sh t hello ".Я должен также заставить его работать тире, "sh t-hello" и даже комбинированную строку типа "sh thsh thellosh * t".
Должен ли я также разделить список, потому чтоэто один файл 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;
};
};