Ce sujet explique comment utiliser efficacement les expressions régulières (regex) dans la fonctionnalité de Mots Surveillés de 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.orgpour 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.
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.
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.
threadCeci correspondra à
thread,THREAD, etthReAd.Alternatives de caractères
Utilisez des alternatives de caractères pour élargir vos correspondances.
(t|7)hr(3|e)(4|a)dCeci correspondra à tous les cas ci-dessus, plus
thr3ad,7hread, etthr34d.
threads?\\bCeci correspondra à
threadetthreadsmais pas àthreadedouthreading.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?\bCeci correspond à
threadetthreadsmais évite les correspondances commethreadlikeouunthreading.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)eCeci correspond à toutes les formes couramment orthographiées du mot grüße — y compris
gruesseetGRÜSSESupposons que vous vouliez bloquer le mot
Über, mais pasÜbersicht. Utiliser des limites de mots comme\b(ü|ue)ber\bne 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\bCeci correspondra maintenant de manière appropriée à
Überetueber, mais pas àÜbersichtouuebersicht.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\bCeci correspond à :
password,p@ssword,passw0rd,p@ssw0rd, mais pasmypasswordoupassword123Gestion 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\bCeci correspond à :
spam,s.p.a.m,s-p-a-m, mais pass_p_a_m(le trait de soulignement est un caractère de mot),spammy, oumyspamCorrespondance 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)?\bCeci correspond à :
contact,contact us,contact me,email us,email me,reach,reach us,reach meDé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,}\bCeci correspond à :
user@example.com,my.name@sub.domain.co.uk,user+tag@domain.orgRecherche 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)\bCeci correspond à :
#discourse,#DISCOURSE,#disc0urse,#forum,#f0rum, mais pas#discourseengineou#forumsDé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éeRecherche d’URL avec ou sans protocole
\b(?:https?:\/\/)?[\w-]+(\.[\w-]+)+\bCeci 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,h01dIncorrect :
[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, oud, ce qui lui fait correspondre des mots commehad,old, etc.Utilisation des parenthèses pour les mots optionnels
Correct :
forum(s)?Ceci correspond correctement à :
forum,forumsIncorrect :
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 wordPour 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, oud, et non à la phrase “bad word”.Utilisation efficace des quantificateurs
\b[0-9]{3,5}\bCeci correspond aux nombres avec 3 à 5 chiffres :
123,1234,12345, mais pas12ou123456Pour des motifs répétitifs spécifiques :
(spam){2,3}Ceci correspond à :
spamspam,spamspamspamApplication correcte des limites de mots
Sans limites :
freeCeci correspond à :
free,freedom,carefreeAvec limites :
\bfree\bCeci correspond uniquement à :
free, mais pas àfreedomoucarefreeGestion correcte des caractères Unicode
Approche correcte :
(?:^|\s)(ö|oe)zel\bCeci correspond à :
özel,oezelaux limites de mots, même avec des caractères UnicodeApproche incorrecte :
\bözel\bCeci pourrait ne pas fonctionner correctement avec le caractère turc ö.
Informations supplémentaires
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,
\1dans 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 »