如何选择并替换输入字符串中的某些单词而不考虑完整字符串?

问题描述 投票:0回答:1

我正在为我拥有的聊天室制作一个过滤器。

我成功地让它把 NSFW 单词变成一堆符号和星号来审查它,但很多人通过简单地在后面加上反斜杠、句号或其他符号/字母来绕过它,因为我只输入了没有标点符号的单词和符号。他们还添加了字符,例如 eeeNSFWeee,因此过滤器不会将其视为单词。

有没有办法让过滤器选择在字符串中形成单词的某些字符并替换它们(替换或不替换连接到消息的额外字符)?

过滤器是用 JavaScript 和 Socket.io 制作的

筛选代码:

    const array = [
  "NSFW",
  "Bad Word"
  "Inappropriate Word"
];

message = message
  .split(" ")
  .map((word) => (array.includes(word.toLowerCase()) ? "$#!%" : word))
  .join(" ");

例如,如果有人完全一样地输入“Bad Word”(大写不是问题),它就会成功审查。但是,如果有人输入“Bad Word”。这将是一个问题,因为它有一个句点,它会将其视为不同的单词,这就是我需要解决的问题。

javascript filter chat
1个回答
0
投票

您可以采取多种方法。

如果您只想删除符号,可以使用replace()。例如:

word.replace(/[&\/\\#,+()$~%.`'"!;\^:*?<>{}_\[\]]/g, '')

您通常可以使用正则表达式,它允许您匹配模式而不是精确的字符串匹配。

您还可以使用更复杂的模糊匹配库或自定义模糊匹配来实现您的目标。这篇帖子可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.