11
votes

Remplacer les mauvais mots en utilisant regex

J'essaie de créer une méthode de filtrage Bad Word que je peux appeler avant chaque insertion et à la mise à jour pour vérifier la chaîne pour tout mauvais mot et remplacer par "[censuré]".

J'ai une table SQL avec une liste de mots méchants, je souhaite les ramener et les ajouter à une liste de liste ou de chaîne et vérifiez la chaîne de texte qui a été transmis et si des mots méchants sont trouvés. Remplacez-les et renvoyez une chaîne filtrée.

J'utilise c # pour cela.


2 commentaires

Ce n'est probablement pas une bonne idée de mettre à jour / insérer les chaînes censurées sans tenir une copie de la chaîne non censurée. Vous devrez probablement adapter votre stratégie de réseau et de remplacement pour de nombreuses itérations jusqu'à ce qu'elle soit «assez droite» et ne devrait pas risquer de détruire vos données entre-temps.


Vous a donné un vote juste pour les appeler «mauvais mots».


4 Réponses :


2
votes

Vous pouvez utiliser la méthode string.replace () ou la classe de regex


0 commentaires

4
votes

Bien que je sois un grand fan de regex, je pense que cela ne vous aidera pas ici. Vous devriez récupérer votre mauvais mot dans une liste de chaînes ou une matrice de chaîne et utilisez system.string.replace sur votre message entrant.

Peut-être mieux, utilisez system.string.split et .join méthodes: xxx

dans l'échantillon, mayContainbadwords est la chaîne que vous souhaitez vérifier; Badwords est un tableau de chaînes, vous chargez de votre table SQL Bad Word et Cleanstring est votre résultat.


3 commentaires

qui transformerait le badminton en [censuré] Mington


exactement! : D - Mais sérieusement, il s'agit simplement d'un échantillon, pas d'une solution ... Je ne vois aucune approbation à l'utilisation de Regex, ici.


et il tourne "mauvais" à "" mais pas "[censuré]"



19
votes

S'il vous plaît voir cette "CLBUTIC" (ou pour votre cas Cl [censuré] IC) Article Avant de faire une chaîne Remplacer sans envisager les limites de mots:

http://www.codinghorror.com/blog/2008/10/OBSCenity-Filters -bad-idée-or-incroyablement-intercoursing-bad-idée.html

évidemment pas infaillible (voir article ci-dessus - Cette approche est si facile de se déplacer ou de produire de faux positifs ...) ou optimisées (les expressions régulières doivent être mises en cache et compilées), mais ce qui suit filtrera des mots entiers (pas de "CLButtics") et de pluralités simples de mots: < / p> xxx

donne la sortie:

Je n'ai pas eu de sommeil [censuré] pour [censuré] [censuré] jours - le voisin voisin joue de la musique classique à pleine inclinaison!

Notez que "Classique" ne devient pas "CL [censuré] ical", comme des mots entiers sont assortis avec l'expression régulière.

Mise à jour 2 < / p>

et pour démontrer une saveur de la manière dont cela (et dans les techniques de base de base \ de la chaîne de base) peut être facilement subvertie, voir la chaîne suivante:

"Je n'avais pas de Cranberryä ± ng sommeil pour chuffä ± Ng Days de chuffä ± ngs - Le voisin voisin joue de la musique classique à pleine inclinaison!"

J'ai remplacé le "I" avec des minuscules turcs Endottd "Ä ±". S'est toujours assez offensant!


4 commentaires

Bon article de fond. Aurait probablement placé comme un commentaire plutôt qu'une réponse, car cela ne répond pas vraiment à la question.


@Robin je vais brûler en enfer, mais j'ai fourni un exemple.


+1, tandis que c'est un problème difficile / impossible de résoudre. (J'ai vu des arcades remplies du nom CLINT à cause de la police utilisée!) Je préférerais toujours voir un groupe de s [censuré] erreurs de Horpe qu'un navigateur pour enfants rempli d'obscénités.


@Robin L'approche ci-dessus donnerait "Scunthorpe" que je pense est plus appropriée. Les enfants sont naturellement curieux.



1
votes

Il y a aussi un bel article qui peut être trouvé ici

Avec une petite technique HTML-analyse, vous pouvez obtenir une grande liste avec des mots de jure de Noswear


0 commentaires