Добавление фильтра ненормативной лексики в простое приложение Socket.IO - PullRequest
0 голосов
/ 24 декабря 2018

Я делаю простое приложение socket.io, которое вы можете увидеть по адресу https://backchannel.glitch.me. Я пытаюсь добавить относительно простой фильтр ненормативной лексики для этого сайта, используя RegExp, но продолжаю сталкиваться с проблемой - вместо отображениясообщение, которое я хочу получить при обнаружении плохого слова, ничего не происходит.Я не очень разбираюсь в JS и регулярных выражениях, поэтому, возможно, я что-то упустил из виду и буду признателен за любую помощь.

мой код:

<!doctype html>
<html>
  <head>
  <script>
  if (location.protocol != 'https:') {
   location.href = 'https://backchannel.glitch.me'
  }
</script>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="shortcut icon" type="image/x-icon" href="https://cdn.glitch.com/a359ff0b-1273-40ab-a005-10968e106f1d%2Fimg_54456.png?1544043684904"/>
    <title>Backchannel</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; text-align: left; overflow: auto; color: White;}
      form { background: #666666; padding: 3px; position: static; bottom: 0; width: 100%; }
      form input { padding:  8px; width: 90%; margin-right: .5%;}
      form button { width: 9%; background: White; border: none; padding: 9px 8px; }
      #messages { list-style-type: none; margin: 0; padding: 0; max-height: 95.7vh; overflow:}
      #messages li { padding: 5px 10px; background: none;}
      #messages li:nth-child(odd) { background: none; }
      main {text-align: center; margin: 0; } 
      .messageContainer {overflow: auto;}
    </style>
<head>
</head>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var audio = new Audio('https://cdn.glitch.com/a359ff0b-1273-40ab-a005-10968e106f1d%2FError-sound.mp3?1544050723783');
$(function () {
    var socket = io();
    $('form').submit(function(){
      socket.emit('chat message', $('#m').val());
      $('#m').val('');
      return false;
    });
    socket.on('chat message', function(msg){
      //if a user types a message containing a "bad word", do not print it and instead print a system message saying it was blocked.
      if (msg == new RegExp('*bad words*')) {
      $('#messages').append($('<li>').text('[SYSMOD]: Message blocked due to explicit content'));
      }
      else
      $('#messages').append($('<li>').text(' [USER]: ' + msg));
      audio.play();
    });
//When the server emits " new user connected", add a message which says so.
  socket.on('new user', function(msg){
      $('#messages').append($('<li>').text('[SYSTEM]: New User Connected'));
      audio.play();
    });
//When the server emits "user disconnected", add a message which says so.
  socket.on('user disconnected', function(msg){
      $('#messages').append($('<li>').text('[SYSTEM]: User Disconnected'));
      audio.play();
    });
  });
  </script> 
  <form action="">
    <input id="m" autocomplete="off" /><button>Send Message</button>
    </form>
  </head>
  <body background="https://cdn.glitch.com/a359ff0b-1273-40ab-a005-10968e106f1d%2Fspacewinter1.jpg?1545146217248">
  <div id="main">
<div class="messageContainer">
      <ul id="messages"></ul>
    </div>
  </div>
  </body>
</html>

1 Ответ

0 голосов
/ 24 декабря 2018

Сравнение строки с объектом RegExp с логическим оператором всегда возвращает false.Для этого вы хотите использовать test метод RegExp.Например:

new RegExp("*bad words*").test(msg);

Также существует сокращенный синтаксис для построения регулярного выражения.

/myregex/.test(msg);
...