Bad Word Filter schreiben mit Javascript?

... komplette Frage anzeigen

2 Antworten

Man könnte die Fehlerquelle vielleicht besser eingrenzen, wenn du uns den Code zeigen könntest. Ansonsten kannst du das bei einem Array ähnlich wie unten angegeben machen.

Alternativ kannst du die Badwords auch vorher schon mittels regex-Replace parsen, bevor du den Text in ein Array umwandelst:

var text = text.replace(RegExp(badwordlist.join("|"), "gi"), function(match) {
return match.replace(/./g, "*");
});

Das Script findet allerdings auch Badwords die in anderen Wörtern drinstecken. Um das zu unterbinden kannst du auch ein "\\b" vor und nach "badwordlist.join(...)"  setzen.

Das Problem was du mit Badword-Filtern hast, die auch die Inhalte von einzelnen Wörtern durchsuchen (also obiges Beispiel) ist, ist auch als das Scunthorpe-Problem bekannt. (Das Script filtert Badwords in Wörtern, die eigentlich als Ganzes was anderes bedeuten) Hier der Wikipedia-Artikel dazu: https://en.wikipedia.org/wiki/Scunthorpe_problem

Einen Algorithmus zu schreiben, der das Ganze umgeht, ist, wie du dir aber sicher auch denken kannst, keine einfache Aufgabe.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Etnirp
28.03.2016, 12:32

Vielen Dank! Mit deinem kurzen Code funktioniert das jetzt ideal, nur müsste ich halt erklären können was in dem Teil passiert, kannst du mir das eventuell noch kurz erläutern? Also was die einzelnen Befehle machen :)

0

Du hast einen Array mit den Wörtern die überprüft werden sollen und einen Array mit verbotenen Wörtern. Du musst den ersten Array mit einer schleife durch laufen und in jedem durchlauf in einer weiteren schleife abfragen ob das aktuelle Wort mit dem vom zweiten array gleich ist. Sollte es wahr sein dann setzt du die array stelle des ersten Arrays auf "*".
Das hier ist jetzt pseudocode das heisst so im prinzip kann es aussehen(siehe Bild):

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Etnirp
27.03.2016, 20:26

Danke schon mal für deine Antwort!

Habe es genauso schon probiert, es passiert gar nichts, die Konsole gibt aber auch keine Fehler aus...

Weiters ist das Problem bei dieser Methode, das falls ein Badword in einem anderen Drin steckt, dieses als aktzeptabel erkannt wird, das nicht sein. Also es sollte auch versteckte Badwords finden und das kann ich mir nicht vorstellen, wie das gehen soll.

0

Was möchtest Du wissen?