javascript - 将脏话过滤器添加到简单的 Socket.IO 应用程序

标签 javascript html regex socket.io profanity

我正在制作一个简单的 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>

最佳答案

使用 bool 运算符将字符串与 RegExp 对象进行比较将始终返回 false。为此,您需要使用 RegExp 的 test 方法。例如:

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

此外,还存在用于构造正则表达式的简写语法。

/myregex/.test(msg);

关于javascript - 将脏话过滤器添加到简单的 Socket.IO 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53907755/

相关文章:

javascript - 使特定的 <select> 选项自动选中并禁用另一个表单字段中的复选框

c# - 用于在新窗口/选项卡中打开其他网站链接的自动化系统

html - RegEx 和 HTML : How to match an element "foo", 其中至少包含两个其他元素 "bar"? (否定前瞻断言)

javascript - 多个复选框下拉 onchange() 不起作用

python - 三引号的正则表达式

regex - 如何使用驼峰式文件名?

php - 基于浏览器区域设置/位置的自动日期格式化

javascript - Webpack babel-loader 不解析箭头函数

javascript - javascript 中的 html 不工作

javascript - Masonry - imagesLoaded - 不是函数