Utiliser Regex avec les mots surveillés

:bookmark: Ce sujet explique comment utiliser efficacement les expressions régulières (regex) dans la fonctionnalité Mots surveillés de Discourse.

:discourse: Pour les sites hébergés par nos soins, ces paramètres sont masqués. Les clients disposant d’un plan d’hébergement payant peuvent contacter notre équipe de support à l’adresse team@discourse.org pour demander l’utilisation de regex avec les Mots surveillés.
Remarque : Cette fonctionnalité n’est pas disponible sur notre plan d’hébergement gratuit.

Les expressions régulières (regex) sont un outil puissant pour définir des modèles de recherche. Vous pouvez utiliser des regex dans la fonctionnalité Mots surveillés pour améliorer la précision et la flexibilité du filtrage des mots sur votre site Discourse.

:information_source: Pour utiliser les expressions régulières (regex) dans les mots surveillés, vous devez d’abord activer le paramètre du site watched_words_regular_expressions.

:warning: Les regex sont extrêmement puissants et donc dangereux. Une instruction regex mal écrite peut causer des problèmes à vos utilisateurs. Testez vos instructions regex sur des instances de préproduction avant de les déployer en production.

Exemples de modèles regex

Voici quelques modèles regex courants et leur utilisation :

Insensibilité à la casse

Par défaut, Discourse correspond aux formes majuscules et minuscules d’un mot.

thread

Cela correspondra à thread, THREAD et thReAd.

Alternances de caractères

Utilisez des alternances de caractères pour élargir vos correspondances.

(t|7)hr(3|e)(4|a)d

Cela correspondra à tous les cas ci-dessus, ainsi qu’à thr3ad, 7hread et thr34d.

threads?\b

Cela correspondra à thread et threads, mais pas à threaded ou threading.

Limites de mots

Les modèles regex peuvent involontairement correspondre à des parties de mots. Utilisez des limites de mots pour éviter les correspondances partielles.

\bthreads?\b

Cela correspond à thread et threads, mais évite des correspondances comme threadlike ou unthreading.

Gestion des caractères Unicode

Les limites de mots standard peuvent échouer avec les caractères Unicode. Créez des limites pour les caractères mal gérés par les regex JavaScript.

gr(ü|ue)(ß|ss)e

Cela correspond à toutes les formes couramment orthographiées du mot grüße — y compris gruesse et GRÜSSE.

Disons que vous souhaitez bloquer le mot Über, mais pas Übersicht. L’utilisation de limites de mots comme \b(ü|ue)ber\b ne fonctionne pas car certains indicateurs de limites de mots des regex JavaScript ne gèrent pas correctement les caractères Unicode. Vous devez donc créer vos propres limites.

(?:^|\s)(ü|ue)ber\b

Cela correspondra maintenant correctement à Über et ueber, mais pas à Übersicht ou uebersicht.

Détection des substitutions délibérées de caractères

Pour repérer les mots où les utilisateurs substituent des chiffres ou des caractères spéciaux à des lettres :

\bp[a@]ssw[o0]rd\b

Cela correspond à : password, p@ssword, passw0rd, p@ssw0rd, mais pas à mypassword ou password123.

Gestion des caractères avec ponctuation intercalée

Pour repérer les tentatives de contournement des filtres en insérant de la ponctuation :

\bs\W*p\W*a\W*m\b

Cela correspond à : spam, s.p.a.m, s-p-a-m, mais pas à s_p_a_m (le trait de soulignement est un caractère de mot), spammy ou myspam.

Correspondance de multiples variations de mots

Pour correspondre à des phrases qui peuvent apparaître sous différentes formes de mots :

\b(contact|email|reach)( us| me)?\b

Cela correspond à : contact, contact us, contact me, email, email us, email me, reach, reach us, reach me.

Détection de modèles d’adresses e-mail

Pour repérer des modèles génériques d’adresses e-mail :

\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}\b

Cela correspond à : user@example.com, my.name@sub.domain.co.uk, user+tag@domain.org.

Recherche de variations de hashtags

Pour correspondre à des hashtags avec une casse différente ou de légères variations :

\#(disc[o0]urse|f[o0]rum)\b

Cela correspond à : #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum, mais pas à #discourseengine ou #forums.

Détection de modèles répétitifs

Pour repérer des caractères répétés qui pourraient indiquer du contenu spam :

([a-zA-Z])\1{3,}

Cela correspond à : aaaample, helllllo, yessssss, détectant toute lettre répétée 4 fois ou plus consécutivement.

Recherche d’URL avec ou sans protocole

\b(?:https?:\/\/)?[\w-]+(\.[\w-]+)+\b

Cela correspond à : example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org.

Éviter les classes de caractères imbriquées

Correct :

(hold)?

Cela correspond correctement au mot optionnel “hold”.

Ou si vous souhaitez des alternances de caractères :

[h][o0][l1][d]

Cela correspond à : hold, h0ld, ho1d, h01d.

Incorrect :

[h[o0][l1]d]?

Cela tente incorrectement d’imbriquer des classes de caractères et correspondra à n’importe quel caractère unique parmi h, o, 0, l, 1 ou d, ce qui permet de correspondre à des mots comme had, old, etc.

Utilisation de parenthèses pour les mots optionnels

Correct :

forum(s)?

Cela correspond correctement à : forum, forums.

Incorrect :

forum[s]?

Cela correspond à “forum” suivi d’un “s” optionnel, mais utilise inutilement une classe de caractères.

Utilisation correcte des classes de caractères

Correct :

bad word

Pour correspondre à la phrase “bad word”.

Ou pour un exemple de classe de caractères :

[bB][aA][dD]

Cela correspond à : bad, Bad, bAd, BAD, etc.

Incorrect :

[bad word]

Cela correspond à n’importe quel caractère unique parmi b, a, d, w, o, r ou d, et non à la phrase “bad word”.

Utilisation efficace des quantificateurs

\b[0-9]{3,5}\b

Cela correspond à des nombres comportant de 3 à 5 chiffres : 123, 1234, 12345, mais pas à 12 ou 123456.

Pour des modèles répétitifs spécifiques :

(spam){2,3}

Cela correspond à : spamspam, spamspamspam.

Application correcte des limites de mots

Sans limites :

free

Cela correspond à : free, freedom, carefree.

Avec limites :

\bfree\b

Cela correspond uniquement à : free, mais pas à freedom ou carefree.

Gestion correcte des caractères Unicode

Approche correcte :

(?:^|\s)(ö|oe)zel\b

Cela correspond à : özel, oezel aux limites de mots, même avec des caractères Unicode.

Approche incorrecte :

\bözel\b

Cela peut ne pas fonctionner correctement avec le caractère turc ö.

Informations complémentaires

:information_source: Vous pouvez tester les expressions régulières sur https://regex101.com/. Si vous le faites, assurez-vous de sélectionner le style de regex ECMAScript.

Les références arrière de groupes de capture regex (par exemple, \1 dans les chaînes de remplacement) ne sont pas prises en charge dans les valeurs de remplacement des Mots surveillés. Les actions de remplacement et de lien prennent en charge les regex pour la correspondance, mais le remplacement est toujours une chaîne littérale.

13 « J'aime »

Pardonnez mon manque d’expérience, mais je n’ai pas réussi à trouver le paramètre du site pour les expressions régulières de mots surveillés nulle part. J’ai également cherché regex, expression régulière et d’autres variantes, mais je n’ai rien trouvé qui ressemble à ce qui permettrait les regex pour les mots surveillés. Avez-vous le slug des paramètres du site où cela pourrait être activé (instance hébergée dans le cloud) ?

EDIT la réponse était juste au-dessus et trouvée ici

2 « J'aime »