Regex --> Détecter à la fois "gros con" "gros&nbs;con" ou "gros  con"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Regex --> Détecter à la fois "gros con" "gros&nbs;con" ou "gros  con"

par Bizule » 06 mars 2009, 02:59

Merci pour le tuyau blof!

Voici donc une nouvelle expression améliorée pour ceux qui auraient besoin d'un filtre à gros mots. Encore une fois, n'hésitez pas à proposer des ajouts/améliorations possibles :

Code : Tout sélectionner

$filter = "/". # Ouverture //Noms communs grossiers divers "\bmerde\b|\bcouille\b|\bsaloperie\b|". // \b permet de délimiter les mots //Les mêmes au pluriel "\bmerdes\b|\bcouilles\b|\bsaloperies\b|". //Autres mots grossiers "\bfuck\b|". //Verbes grossiers et leurs déclinaisons les plus probables "\bemmerd|". "\bemerd|". "\benmerd|". "\bchier\b|\bchié\b|\bchiée\b|\bchiant\b|\bchiants\b|\bchiante\b|\bchiantes\b|". "\bencul|". "\bniquer\b|\bnique\b|\bniques\b|\bniqué\b|\bniquée\b|". "\bnik ta\b|\bnike ta\b|\bnicke ta\b|". //Insultes adressées à une personne de sexe féminin "\bconne\b|\bconnasse\b|\bconasse\b|\bsalope\b|\bsaloppe\b|\bpétasse\b|\bpetasse\b|\bpute\b|\bputte\b|\bputain\b|\bpoufiasse\b|\bpouffiasse\b|\bchieuse\b|\bchiarde\b|\bgrognasse\b|". //Les mêmes au pluriel "\bconnes\b|\bconnasses\b|\bconasses\b|\bsalopes\b|\bsaloppes\b|\bpétasses\b|\bpetasses\b|\bputes\b|\bputtes\b|\bputains\b|\bpoufiasses\b|\bpouffiasses\b|\bchieuses\b|\bchiardes\b|\bgrognasses\b|". //Insultes adressées à une personne de sexe masculin "\bconnard\b|\bconard\b|\bsalaud\b|\bchieur\b|\bchiard\b|\bmerdeux\b|\bpédé\b|\btarlouze\b|\btrou du cul\b|\btrou-du-cul\b|\btrouduc\b|\btrou duc\b|\btrouduk\b|\bbranleur\b|". //les mêmes au pluriel "\bconnards\b|\bconards\b|\bsalauds\b|\bchieurs\b|\bchiards\b|\bpédés\b|\btarlouzes\b|\btrous du cul\b|\btrous-du-cul\b|\btrouducs\b|\btrous duc\b|\btrouduks\b|\bbranleurs\b|". //On prend quelques précuations avec "con" qui ne peut être bloqué simplement (Chili con carne, le diner de cons, etc.) "petit(\s| )*con\b|gros(\s| )*con\b|sale(\s| )*con\b|\bde con\b|\bun con\b|". //les mêmes au pluriel "petits(\s| )*cons\b|gros(\s| )*cons\b|sales(\s| )*cons\b|\bdes cons\b|". //On prend quelques précuations avec "pd" qui peut être un sigle ou une abréviation "petit(\s| )*pd|gros(\s| )*pd|sale(\s| )*pd|\bde pd|\bun pd|". //les mêmes au pluriel "petits(\s| )*pd|sales(\s| )*pd|\bdes pd|". //Autres expressions à filtrer "\bva te faire\b|\bvas te faire\b|\ballez vous faire\b|\bdans le cul\b|\bmon cul\b|\bton cul\b|\bta gueule\b|\bvos gueules\b|\bde ta race\b|\btu pues du\b|\btu pues de la\b". # la dernière ligne n'a pas le | à la fin car le /i ferme le regex après "/i"; # Le "/" ferme l'expression régulière et "i" permet de ne pas tenir compte de la casse.
[/code]

par blof » 05 mars 2009, 15:37

Ok, il semblerait que ceci soit la solution :

Code : Tout sélectionner

(\W|^)con(\W|$)
\b qui représente une limite de mot est fait pour ça :

Code : Tout sélectionner

\bmot\b
Il faut dire que je ne suis pas le meilleur spécialiste des gros mots. ;-)
Si c'est tout ce que tu as trouvé, je confirme. :wink:

Si vous voyez d'autres mots à ajouter...
Ça risque d'être chaud et de ne pas plaire à tout le monde ... :)

par Berzemus » 05 mars 2009, 12:20

c'est fin tout ça... :?

par agité » 05 mars 2009, 11:12

Oui mais les djeuns ils parlent le sms genre "konar 2 mor" et la tu l'as dans l'os non ?

par Bizule » 05 mars 2009, 01:14

Voici mon expression régulière qui pourra servir à d'autres je l'espère. J'aimerais beaucoup que vous me disiez ce que vous en pensez et surtout si vous voyez des améliorations possibles (que ce soit au niveau du code ou du... lexique :oops: ). J'y ai passé pas mal de temps et je pense qu'elle est assez efficace en l'état, même s'il est impossible de tout filtrer, c'est clair.

Vous pouvez la tester et la mettre à l'épreuve ici : http://www.regextester.com/ (il faut regrouper l'expression en un seul bloc) :

Code : Tout sélectionner

$wgSpamRegex = "/". # Ouverture //Noms communs grossiers divers "(\W|^)merde(\W|$)|(\W|^)couille(\W|$)|(\W|^)saloperie(\W|$)|". //Les mêmes au pluriel "(\W|^)merdes(\W|$)|(\W|^)couilles(\W|$)|(\W|^)saloperies(\W|$)|". //Autres mots grossiers "(\W|^)fuck(\W|$)|". //Verbes grossiers et leurs déclinaisons les plus probables "(\W|^)emmerd|". "(\W|^)emerd|". "(\W|^)enmerd|". "(\W|^)chier(\W|$)|(\W|^)chié(\W|$)|(\W|^)chiée(\W|$)|(\W|^)chiant(\W|$)|(\W|^)chiants(\W|$)|(\W|^)chiante(\W|$)|(\W|^)chiantes(\W|$)|". "(\W|^)encul|". "(\W|^)niquer(\W|$)|(\W|^)nique(\W|$)|(\W|^)niques(\W|$)|(\W|^)niqué(\W|$)|(\W|^)niquée(\W|$)|". "(\W|^)nik ta(\W|$)|(\W|^)nike ta(\W|$)|(\W|^)nicke ta(\W|$)|". //Insultes adressées à une personne de sexe féminin "(\W|^)conne(\W|$)|(\W|^)connasse(\W|$)|(\W|^)conasse(\W|$)|(\W|^)salope(\W|$)|(\W|^)saloppe(\W|$)|(\W|^)pétasse(\W|$)|(\W|^)petasse(\W|$)|(\W|^)pute(\W|$)|(\W|^)putte(\W|$)|(\W|^)putain(\W|$)|(\W|^)poufiasse(\W|$)|(\W|^)pouffiasse(\W|$)|(\W|^)chieuse(\W|$)|(\W|^)chiarde(\W|$)|(\W|^)grognasse(\W|$)|". //Les mêmes au pluriel "(\W|^)connes(\W|$)|(\W|^)connasses(\W|$)|(\W|^)conasses(\W|$)|(\W|^)salopes(\W|$)|(\W|^)saloppes(\W|$)|(\W|^)pétasses(\W|$)|(\W|^)petasses(\W|$)|(\W|^)putes(\W|$)|(\W|^)puttes(\W|$)|(\W|^)putains(\W|$)|(\W|^)poufiasses(\W|$)|(\W|^)pouffiasses(\W|$)|(\W|^)chieuses(\W|$)|(\W|^)chiardes(\W|$)|(\W|^)grognasses(\W|$)|". //Insultes adressées à une personne de sexe masculin "(\W|^)connard(\W|$)|(\W|^)conard(\W|$)|(\W|^)salaud(\W|$)|(\W|^)chieur(\W|$)|(\W|^)chiard(\W|$)|(\W|^)merdeux(\W|$)|(\W|^)pédé(\W|$)|(\W|^)tarlouze(\W|$)|(\W|^)trou du cul(\W|$)|(\W|^)trou-du-cul(\W|$)|(\W|^)trouduc(\W|$)|(\W|^)trou duc(\W|$)|(\W|^)trouduk(\W|$)|(\W|^)branleur(\W|$)|". //les mêmes au pluriel "(\W|^)connards(\W|$)|(\W|^)conards(\W|$)|(\W|^)salauds(\W|$)|(\W|^)chieurs(\W|$)|(\W|^)chiards(\W|$)|(\W|^)pédés(\W|$)|(\W|^)tarlouzes(\W|$)|(\W|^)trous du cul(\W|$)|(\W|^)trous-du-cul(\W|$)|(\W|^)trouducs(\W|$)|(\W|^)trous duc(\W|$)|(\W|^)trouduks(\W|$)|(\W|^)branleurs(\W|$)|". //On prend quelques précuations avec "con" qui ne peut être bloqué simplement (Chili con carne, le diner de cons, etc.) "petit(\s| )*con(\W|$)|gros(\s| )*con(\W|$)|sale(\s| )*con(\W|$)|(\W|^)de con(\W|$)|(\W|^)un con(\W|$)|". //les mêmes au pluriel "petits(\s| )*cons(\W|$)|gros(\s| )*cons(\W|$)|sales(\s| )*cons(\W|$)|des cons(\W|$)|". //On prend quelques précuations avec "pd" qui peut être un sigle ou une abréviation "petit(\s| )*pd|gros(\s| )*pd|sale(\s| )*pd|(\W|^)de pd|(\W|^)un pd|". //les mêmes au pluriel "petits(\s| )*pd|sales(\s| )*pd|(\W|^)des pd|". //Autres expressions à filtrer "(\W|^)va te faire(\W|$)|(\W|^)vas te faire(\W|$)|(\W|^)allez vous faire(\W|$)|(\W|^)dans le cul(\W|$)|(\W|^)mon cul(\W|$)|(\W|^)ton cul(\W|$)|(\W|^)ta gueule(\W|$)|(\W|^)vos gueules(\W|$)|(\W|^)de ta race(\W|$)|(\W|^)tu pues du(\W|$)|(\W|^)tu pues de la(\W|$)". # la dernière ligne n'a pas le | à la fin car le /i ferme le regex après "/i"; # Le "/" ferme l'expression régulière et "i" permet de ne pas tenir compte de la casse.

Si vous voyez d'autres mots à ajouter...

par Invité » 04 mars 2009, 21:06

Ok, il semblerait que ceci soit la solution :

Code : Tout sélectionner

(\W|^)con(\W|$)
Le ^ autorise le regex à détecter con s'il se trouve en début de ligne, sans caractère le précédent, le $ fait de même s'il se trouve en fin de ligne sans rien qui le suive.

Bon, je vais essayer de refaire mon filtre de cette manière. Si vous souhaitez aussi, de votre côté, vous amuser à créer la liste d'expression regex parfaite, n'hésitez pas. Il faut dire que je ne suis pas le meilleur spécialiste des gros mots. ;-)

par Bizule » 04 mars 2009, 20:50

\Wgros( |\W)con\W

Ca gère pas mieux ça ?
Mais c'est vrai ça ! :D

En fait, si j'ai bien compris, je pourrais même me contenter de :

Code : Tout sélectionner

\Wcon\W
Ceci détectera con, sauf si le mot est directement appondu à un caractère alphanumérique, avant ou après.

J'ai testé (http://www.regextester.com/) et cela semble OK. Par contre, si "con" est le premier mot (et que rien ne le précède) ou le dernier (et que rien ne lui succède), il ne semble pas détecté. Autrement dit, si la personne n'écrit que le mot "con" et rien d'autre, le filtre ne le bloque pas. Est-ce que je me trompe?

par Bizule » 04 mars 2009, 18:19

Et si quelqu'un parle d'un gros conducteur, il se passe quoi ?
Pour éviter ce genre de problèmes, je place des espaces blancs avant et/ou après lorsque cela est nécessaire (par exemple " con " au lieu de "con"). En revanche, je limite certaines expressions courantes (par exemple "sale(\s| )*con", "espèce(\s| )*de(\s| )*con").

Exemples extraits de ma liste d'expressions :

Code : Tout sélectionner

$filter = "/". # Ouverture //pvte : prudence car plusieurs mots commencent ou se terminent par pvte " pvte |petite(\s| )*pvte|grosse(\s| )*pvte|sale(\s| )*pvte|espèce(\s| )*de(\s| )*pvte|espece(\s| )*de(\s| )*pvte|es(\s| )*une(\s| )*pvte|es(\s| )*qu'une(\s| )*pvte|". //pvtain : a priori, aucun mot ne contient pvtain "pvtain|". //sal0pe : a priori, aucun mot ne se termine par sal0pe, mais certains commencent par sal0pe (sal0pette, ...) "sal0pe |petite(\s| )*sal0pe|grosse(\s| )*sal0pe|sale(\s| )*sal0pe|espèce(\s| )*de(\s| )*sal0pe|espece(\s| )*de(\s| )*sal0pe|es(\s| )*une(\s| )*sal0pe|es(\s| )*qu'une(\s| )*sal0pe|". //sal0ppe : a priori, aucun mot ne contient sal0ppe "sal0ppe|". //...de m3rde "(\s| )*de(\s| )*m3rde". # la dernière ligne n'a pas le | à la fin car le /i ferme le regex après "/i"; #Fermeture
Un site utile pour trouver tous les mots qui en contiennent un autre : http://www.plusdemots.com/

Bien sûr, ce n'est pas si simple à mettre en place... mais si vous avez de meilleures idées, n'hésitez pas. Il s'agit d'un site interactif pour enfants, d'où mon souhait d'intégrer ce genre de filtre.

par naholyr » 04 mars 2009, 17:41

Ah il va être beau le référencement du forum avec ça =D>
Trop tard

par ouckileou » 04 mars 2009, 14:43

Ah il va être beau le référencement du forum avec ça =D>

par savageman » 04 mars 2009, 13:27

\Wgros( |\W)con\W

Ca gère pas mieux ça ?

par Berzemus » 04 mars 2009, 10:14

Et si quelqu'un parle d'un gros conducteur, il se passe quoi ?

Tu peux faire une recherche sur "reviewuation" ou "clbuttic" pour comprendre que ce type de filtrage n'est pas une bonne idée.

http://www.codinghorror.com/blog/archives/001176.html

par Byzule » 04 mars 2009, 00:40

Merci beaucoup pour cette solution, je crois en effet que c'est ce qu'il me fallait.

J'entends bien ton commentaire Ryle, mais je suis quelqu'un de persévérant ;-) Et si je cherche à affiner mes expressions, c'est bien parce que je suis tout à fait conscient des difficultés que tu soulèves, et à juste titre.

par naholyr » 03 mars 2009, 23:29

Pour répondre à la question d'origine, un simple : "gros( |\s)*con" répondra à la problématique.

par Ryle » 03 mars 2009, 23:19

A mon avis tu te lances dans une belle usine à gaz...

En gros, tu cherches à identifier n'importe quel qualificatif (parce qu'il peut être gros, mais également grand, petit, sale, ...) suivit du mot "con" (mais j'imagine que d'autres insultes ne seraient pas plus appréciées, et malheureusement pour toi la langue française est riche en beaucoup de choses, y compris en insultes ... sans parler des versions phonétiques avec un "kon" ou un "quon" qu'il te faudrait gérer aussi tant qu'on y est), avec éventuellement n'importe quel(s) caractère(s) spécial(aux) entre les deux (&~#{[|`\^...) et tu seras tranquile ... tant que personne ne pensera à glisser des lettres ou des chiffres (tête 2 ...) parce que tu ne les auras pas prévus... et quand bien même il faudra ensuite réussir à dissocier tout ça des mot qui contiendront ces éléments sans forcément être grossier (tiens, ben dans contiendront, y a "tiendront" ... :-*)

Bref, si l'intention est louable, je suis pas forcément convaincu (argh encore un ;)) de l'intérêt ou de l'éfficacité par rapport au temps que tu pourrais passer dessus... mais ça n'engage que moi :)