Utilisation des Regex avec les Mots Surveillés

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

:discourse: Pour les sites sur notre hébergement, ces paramètres sont masqués. Les clients des plans d’hébergement payants peuvent contacter notre équipe de support à l’adresse team@discourse.org pour demander l’utilisation de regex avec les Mots Surveillés.
Note : 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 les 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 des expressions régulières (regex) dans les mots surveillés, vous devez d’abord activer le paramètre de site watched words regular expressions.

:warning: La Regex est extrêmement puissante et donc dangereuse. Une instruction regex mal écrite peut causer des problèmes à vos utilisateurs. Testez vos instructions regex sur des instances non-production avant de les mettre en production.

Exemples de motifs Regex

Voici quelques motifs regex courants et comment ils peuvent être utilisés :

Insensibilité à la casse

Par défaut, Discourse recherche les formes majuscules et minuscules d’un mot.

thread

Ceci correspondra à thread, THREAD, et thReAd.

Alternatives de caractères

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

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

Ceci correspondra à tous les cas ci-dessus, plus thr3ad, 7hread, et thr34d.

threads?\\b

Ceci correspondra à thread et threads mais pas à threaded ou threading.

Limites de mots (Word boundaries)

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

\bthreads?\b

Ceci correspond à thread et threads mais évite les 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

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

Supposons que vous vouliez bloquer le mot Über, mais pas Übersicht. Utiliser des 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 les caractères Unicode. Vous devez plutôt créer vos propres limites.

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

Ceci correspondra maintenant de manière appropriée à Über et ueber, mais pas à Übersicht ou uebersicht.

Capture des substitutions de caractères délibérées

Pour capturer les mots où les utilisateurs substituent des chiffres ou des caractères spéciaux aux lettres :

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

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

Gestion des caractères avec ponctuation insérée

Pour capturer les tentatives d’évasion des filtres en insérant de la ponctuation :

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

Ceci 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 plusieurs variations de mots

Pour correspondre aux phrases qui pourraient apparaître avec différentes formes de mots :

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

Ceci correspond à : contact, contact us, contact me, email, email us, email me, reach, reach us, reach me

Détection des modèles d’e-mail

Pour capturer les modèles d’adresses e-mail génériques :

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

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

Recherche des variations de hashtags

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

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

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

Détection des motifs répétitifs

Pour capturer les caractères répétés qui pourraient indiquer un contenu de spam :

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

Ceci correspond à : aaaample, helllllo, yessssss, détectant toute lettre répétée 4 fois ou plus d’affilée

Recherche d’URL avec ou sans protocole

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

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

Éviter les classes de caractères imbriquées

Correct :

(hold)?

Ceci correspond correctement au mot optionnel “hold”

Ou si vous voulez des alternatives de caractères :

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

Ceci correspond à : hold, h0ld, ho1d, h01d

Incorrect :

[h[o0][l1]d]?

Ceci 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 lui fait correspondre des mots comme had, old, etc.

Utilisation des parenthèses pour les mots optionnels

Correct :

forum(s)?

Ceci correspond correctement à : forum, forums

Incorrect :

forum[s]?

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

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]

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

Incorrect :

[bad word]

Ceci 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

Ceci correspond aux nombres avec 3 à 5 chiffres : 123, 1234, 12345, mais pas 12 ou 123456

Pour des motifs répétitifs spécifiques :

(spam){2,3}

Ceci correspond à : spamspam, spamspamspam

Application correcte des limites de mots

Sans limites :

free

Ceci correspond à : free, freedom, carefree

Avec limites :

\bfree\b

Ceci correspond uniquement à : free, mais pas à freedom ou carefree

Gestion correcte des caractères Unicode

Approche correcte :

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

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

Approche incorrecte :

\bözel\b

Ceci pourrait ne pas fonctionner correctement avec le caractère turc ö.

Informations supplémentaires

:information_source: Vous pouvez tester les expressions Regex sur https://regex101.com/. Si vous le faites, assurez-vous de changer la saveur regex en ECMAScript.

Les références arrière de groupe de capture de 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 »