Utilisation de Regex avec des mots surveillés

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

:discourse: Si votre site est hébergé par Discourse, veuillez contacter team@discourse.org si vous souhaitez activer ce paramètre.

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é Watched Words pour améliorer la précision et la flexibilité du filtrage de 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 du site watched words regular expressions.

:warning: Les regex sont extrêmement puissantes et donc dangereuses. 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 ligne.

Exemples de modèles Regex

Voici quelques modèles regex courants et comment ils peuvent être employés :

Insensibilité à la casse

Par défaut, Discourse correspond aux 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?\\S+

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

Limites de mots

Les modèles regex peuvent accidentellement correspondre à 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 qui ne sont pas bien 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. L’utilisation de limites de mots comme \\b(ü|ue)ber\\b ne fonctionne pas car certains indicateurs de mots des regex JavaScript ne gèrent pas les caractères Unicode. Au lieu de cela, vous devez créer vos propres limites.

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

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

Capturer les 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 de la ponctuation entre les deux

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, s_p_a_m, mais pas à spammy ou myspam

Correspondance de plusieurs variations de mots

Pour faire correspondre des phrases qui peuvent 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 de modèles d’adresses e-mail

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

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

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

Recherche de variations de hashtags

Pour faire correspondre les 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 de modèles 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 fait qu’il correspond à 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 inutilement une classe de caractères.

Utilisation correcte des classes de caractères

Correct :

bad word

Pour faire 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 de 3 à 5 chiffres : 123, 1234, 12345, mais pas à 12 ou 123456

Pour des modèles 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 peut 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 régler la saveur regex sur ECMAScript.

La capture et le remplacement Regex ne sont pas pris en charge dans Watched Words, uniquement la correspondance. Par conséquent, cela ne fonctionnera pas sur les actions de lien ou de remplacement.

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 »