Добавить фильтр ненормативной лексики - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь добавить фильтр ненормативной лексики на свой сайт, но у меня есть небольшая ошибка в моем коде.

Я хочу, чтобы, если кто-то напишет: " you are idiot ", он будет заменен на: " you are ****"

Но вместо этого он возвращает "*************".

var badWords = ['sex', 'fUck', 'dick', 'penis', 'cum', 'tits', 'fuck', 'homo', 'הומו'];
var regExpSource = badWords.join('|');
var regExpFilter = new RegExp(regExpSource, 'ig');

if(regExpFilter.test(this.message)==true)
this.message=this.message.replace(/./g,'*')

Где моя ошибка, пожалуйста?

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Вот другое решение, в котором не используется регулярное выражение, а вместо этого используется простая строка, заменяющая logi c.

var badWords = ['bad', 'word'] // cleaned just for the example
var messageWords = this.message.split(' ')

for (var i = 0; i < messageWords.length; i++) {
  if (badWords.includes(messageWord[i].toLowerCase())) {
    messageWords[i] = '***'
  }
}

var outputMessage = messageWords.join(' ')

Это решение может быть уточнено больше для крайних случаев, таких как пунктуация и т. Д. c.

0 голосов
/ 12 апреля 2020
this.message.replace(/./g,'*')

Символ . в регулярном выражении означает «любой символ». Итак, это говорит о том, что «замените любой символ на *. Это именно то, что вы видите.

Если вы хотите заменить только слова в вашем регулярном выражении на *, то вам нужно на самом деле используйте это регулярное выражение для замены, что-то вроде этого:

this.message.replace(regExpFilter, match => "*".repeat(match.length))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...