# Regardez les astuces des mots surveillés

**URL:** https://meta.discourse.org/t/watched-words-tricks/153905
**Category:** Feature
**Tags:** watched-words
**Created:** [Juin 5, 2020, 8:34 UTC](https://meta.discourse.org/t/watched-words-tricks/153905 "2020-06-05T08:34:05Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [Juin 5, 2020, 8:34 UTC](https://meta.discourse.org/t/watched-words-tricks/153905/1 "2020-06-05T08:34:05Z")

</div>

Lors de la conversion d’une longue liste de mots surveillés en expressions régulières, j’ai découvert des moyens de contourner les filtres. Ces méthodes semblent fonctionner à la fois pour les mots surveillés « normaux » et pour les expressions régulières.

**Espaces doubles** : si votre mot surveillé est `forbidden word`, il est possible de le contourner en insérant plusieurs espaces entre les deux mots. Fait amusant : dans le message rendu, les doubles espaces sont supprimés, ce qui les rend totalement invisibles dans le texte final.

- Pour éviter cela avec des expressions régulières : utilisez `forbidden\s*word`.
- Pour éviter cela sans expressions régulières : je n’ai pas trouvé de solution.

**Utilisez des tirets bas** pour contourner les limites de mots :

- Sans regex : si vous entourez un mot surveillé de tirets bas, il sera affiché en italique et sera autorisé. Ainsi, `_forbidden_` sera accepté si votre filtre est `forbidden`.

- Avec des regex : normalement, les limites de mots ne sont vérifiées que si vous utilisez `\b`, auquel cas le tiret bas les contourne. Ainsi, `_forbidden_` sera accepté si votre filtre est `\bforbidden\b`.

- Pour éviter cela avec des expressions régulières : utilisez `[\b\_]` au lieu de `\b`.  
_MODIF : cela ne semble pas fonctionner correctement_.  
Supprimer les limites de mots pourrait aussi fonctionner, mais vous risquez alors d’interdire accidentellement des mots comme `cumulative` ou `title` 😉

- Pour éviter cela sans expressions régulières : je n’ai pas trouvé de solution.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [Juin 5, 2020, 9:39 UTC](https://meta.discourse.org/t/watched-words-tricks/153905/2 "2020-06-05T21:39:27Z")

</div>

Bon, c’est généralement le genre de chose pour laquelle nous ne perdons pas de temps à nous battre, car il existe de nombreux « astuces » ingénieuses pour contourner n’importe quelle liste de mots interdits. Unicode est un espace très vaste.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [Juin 5, 2020, 9:57 UTC](https://meta.discourse.org/t/watched-words-tricks/153905/3 "2020-06-05T21:57:37Z")

</div>

En effet, nous avons essayé de faire cela sur plusieurs grands projets éducatifs il y a quelque temps.

Avant qu’il ne soit abandonné, ils ont lancé la correspondance floue, ce qui a prévisiblement causé toutes sortes de problèmes pour des cas d’utilisation légitimes.

---

<div class="post-metadata">

### Author: ![riking](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/riking/32/170938_2.png) [@riking](https://meta.discourse.org/u/riking)
#### Post date: [Juin 5, 2020, 11:22 UTC](https://meta.discourse.org/t/watched-words-tricks/153905/4 "2020-06-05T23:22:29Z")

</div>

Les mots surveillés constituent surtout une « première ligne de défense » contre les mots interdits. Vous avez toujours besoin de la communauté pour signaler les contournements et les violations.

Aucune expression rationnelle que vous puissiez concevoir ne pourra détecter une ![image](https://global.discourse-cdn.com/meta/original/3X/b/2/b25a1b7d8e8cf547db8055a75f1504a6a44c9d53.png).

---

<div class="post-metadata">

### Author: ![elijah](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/elijah/32/104055_2.png) [@elijah](https://meta.discourse.org/u/elijah)
#### Post date: [Juin 6, 2020, 6:52 UTC](https://meta.discourse.org/t/watched-words-tricks/153905/5 "2020-06-06T06:52:35Z")

</div>

> [@RGJ](#):
>
> pour éviter cela avec des expressions régulières : utilisez `[\b\_]` au lieu de `\b`  
> _EDIT cela ne semble pas fonctionner correctement_.

Juste pour vous informer, `[]` sert à définir des « classes de caractères ». Dans les expressions régulières Perl, et probablement Ruby, `\b` représente une « frontière de mot » en dehors d’une classe de caractères et un « retour arrière » à l’intérieur d’une classe de caractères. En C, ‘\b’ est toujours un retour arrière (plus précisément le caractère de contrôle H). Le retour arrière n’est généralement pas un caractère utile, contrairement aux frontières de mots, d’où cette redéfinition.

Pour utiliser une expression régulière afin de détecter « _interdit_ » ou « interdit », je utiliserais probablement :

```
\b_?interdit_?\b

```

(Je sais également comment encoder tous mes caractères en utilisant des entités HTML comme \_ pour éviter les astuces Unicode ou les problèmes liés aux expressions régulières.)

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [Juin 6, 2020, 7:27 UTC](https://meta.discourse.org/t/watched-words-tricks/153905/6 "2020-06-06T07:27:32Z")

</div>

> [@elijah](#):
>
> `\b` est une « limite de mot » en dehors d’une classe de caractères et un « retour arrière » à l’intérieur d’une classe de caractères

Je n’avais jamais réalisé qu’il y avait une différence selon le contexte. Merci pour l’explication ! 🙂
