Estoy creando un filtro para una sala de chat que tengo.
Tuve éxito en hacer que convirtiera las palabras NSFW en un montón de símbolos y asteriscos para censurarlo, pero muchas personas lo eluden simplemente poniendo una barra invertida, un punto u otro símbolo/letra después porque solo pongo las palabras sin la puntuación. y simbolos También vienen con métodos un poco más creativos como eeeNSFWeee para que el filtro no lo cuente como una palabra.
¿Hay alguna manera de hacer que el filtro seleccione ciertos caracteres que forman una palabra en una cadena y los reemplace (con o sin reemplazar los caracteres adicionales conectados al mensaje)?
El Filtro está hecho en javascript y Socket.io
Código de filtro:
const array = [ "NSFW", "Bad Word" "Innapropiate Word" ]; message = message .split(" ") .map((word) => (array.includes(word.toLowerCase()) ? "$#!%" : word)) .join(" "); Por ejemplo, si alguien escribiera "Mala palabra" exactamente así (las mayúsculas no son un problema), lo censuraría con éxito.
Pero si alguien escribió "mala palabra". eso sería un problema porque como tiene un punto lo contaría como una palabra diferente, eso es lo que necesito arreglar.
Hay una serie de enfoques que podría tomar aquí.
Podría usar replace() si solo desea eliminar símbolos. Por ejemplo:
word.replace(/[&\/\\#,+()$~%.`'"!;\^:*?<>{}_\[\]]/g, '')Puede usar expresiones regulares en general, lo que le permite hacer coincidir patrones en lugar de coincidencias de cadenas exactas.
También puede usar bibliotecas de coincidencias aproximadas más complejas o coincidencias aproximadas personalizadas para lograr su objetivo. Esta publicación puede ser útil.