Dieses Thema erklärt, wie reguläre Ausdrücke (Regex) effektiv in der Funktion Watched Words von Discourse verwendet werden.
Wenn Ihre Website mit Discourse gehostet wird, wenden Sie sich bitte an team@discourse.org, wenn Sie diese Einstellung aktivieren möchten.
Reguläre Ausdrücke (Regex) sind ein mächtiges Werkzeug zur Definition von Suchmustern. Sie können Regex in der Funktion Watched Words verwenden, um die Genauigkeit und Flexibilität der Wortfilterung auf Ihrer Discourse-Website zu verbessern.
Um reguläre Ausdrücke (Regex) in „Watched Words“ zu verwenden, müssen Sie zuerst die Website-Einstellung
watched words regular expressionsaktivieren.
Regex ist extrem mächtig und daher gefährlich. Eine falsch geschriebene Regex-Anweisung kann Probleme für Ihre Benutzer verursachen. Testen Sie Ihre Regex-Anweisungen auf Nicht-Produktionsinstanzen, bevor Sie sie live schalten.
Beispiel-Regex-Muster
Hier sind einige gängige Regex-Muster und wie sie eingesetzt werden können:
Groß-/Kleinschreibung ignorieren
Standardmäßig gleicht Discourse sowohl Groß- als auch Kleinbuchstaben eines Wortes ab.
thread
Dies gleicht thread, THREAD und thReAd ab.
Zeichenalternativen
Verwenden Sie Zeichenalternativen, um Ihre Übereinstimmungen zu erweitern.
(t|7)hr(3|e)(4|a)d
Dies gleicht alle oben genannten Fälle ab, plus thr3ad, 7hread und thr34d.
threads?\\S+
Dies gleicht thread und threads ab, aber nicht threaded oder threading.
Wortgrenzen
Regex-Muster können unbeabsichtigt Teile von Wörtern abgleichen. Verwenden Sie Wortgrenzen, um Teilübereinstimmungen zu vermeiden.
\\bthreads?\\b
Dies gleicht thread und threads ab, vermeidet aber Übereinstimmungen wie threadlike oder unthreading.
Behandlung von Unicode-Zeichen
Standardmäßige Wortgrenzen können bei Unicode-Zeichen fehlschlagen. Erstellen Sie Grenzen für Zeichen, die von JavaScript-Regex nicht gut behandelt werden.
gr(ü|ue)(ß|ss)e
Dies gleicht alle gängigen Schreibweisen des Wortes grüße ab – einschließlich gruesse und GRÜSSE.
Angenommen, Sie möchten das Wort Über blockieren, aber nicht Übersicht. Die Verwendung von Wortgrenzen wie \\b(ü|ue)ber\\b funktioniert nicht, da einige der JavaScript-Regex-Wortflags keine Unicode-Zeichen verarbeiten. Stattdessen müssen Sie Ihre eigenen Grenzen erstellen.
(?:^|\\s)(ü|ue)ber\\b
Dies gleicht nun Über und ueber korrekt ab, aber nicht Übersicht oder uebersicht.
Erfassung von bewussten Zeichenersetzungen
Um Wörter zu erfassen, bei denen Benutzer Zahlen oder Sonderzeichen für Buchstaben ersetzen:
\\bp[a@]ssw[o0]rd\\b
Dies gleicht ab: password, p@ssword, passw0rd, p@ssw0rd, aber nicht mypassword oder password123.
Behandlung von Zeichen mit Satzzeichen dazwischen
Um Versuche zu erfassen, Filter durch Einfügen von Satzzeichen zu umgehen:
\\bs\\W*p\\W*a\\W*m\\b
Dies gleicht ab: spam, s.p.a.m, s-p-a-m, s_p_a_m, aber nicht spammy oder myspam.
Abgleich mehrerer Wortvariationen
Zum Abgleich von Phrasen, die in verschiedenen Wortformen vorkommen können:
\\b(contact|email|reach)( us| me)?\\b
Dies gleicht ab: contact, contact us, contact me, email, email us, email me, reach, reach us, reach me.
Erkennung von E-Mail-Mustern
Um generische E-Mail-Adressmuster zu erfassen:
\\b[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}\\b
Dies gleicht ab: user@example.com, my.name@sub.domain.co.uk, user+tag@domain.org.
Finden von Hashtag-Variationen
Um Hashtags mit unterschiedlicher Groß-/Kleinschreibung oder leichten Variationen abzugleichen:
\\#(disc[o0]urse|f[o0]rum)\\b
Dies gleicht ab: #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum, aber nicht #discourseengine oder #forums.
Erkennung von sich wiederholenden Mustern
Um wiederholte Zeichen zu erfassen, die auf Spam-Inhalte hindeuten könnten:
([a-zA-Z])\\1{3,}
Dies gleicht ab: aaaample, helllllo, yessssss, wobei jeder Buchstabe 4 oder mehr Mal hintereinander erkannt wird.
Finden von URLs mit oder ohne Protokoll
\\b(?:https?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+\\b
Dies gleicht ab: example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org.
Vermeidung von verschachtelten Zeichenklassen
Korrekt:
(hold)?
Dies gleicht korrekt das optionale Wort „hold“ ab.
Oder wenn Sie Zeichenalternativen wünschen:
[h][o0][l1][d]
Dies gleicht ab: hold, h0ld, ho1d, h01d.
Falsch:
[h[o0][l1]d]?
Dies versucht fälschlicherweise, Zeichenklassen zu verschachteln, und gleicht jedes einzelne Zeichen aus h, o, 0, l, 1 oder d ab, wodurch Wörter wie had, old usw. abgeglichen werden.
Verwendung von Klammern für optionale Wörter
Korrekt:
forum(s)?
Dies gleicht korrekt ab: forum, forums.
Falsch:
forum[s]?
Dies gleicht „forum“ gefolgt von einem optionalen „s“ ab, verwendet aber unnötigerweise eine Zeichenklasse.
Korrekte Verwendung von Zeichenklassen
Korrekt:
bad word
Um die Phrase „bad word“ abzugleichen.
Oder als Beispiel für eine Zeichenklasse:
[bB][aA][dD]
Dies gleicht ab: bad, Bad, bAd, BAD usw.
Falsch:
[bad word]
Dies gleicht jedes einzelne Zeichen aus b, a, d, w, o, r oder d ab, nicht die Phrase „bad word“.
Effektive Verwendung von Quantifizierern
\\b[0-9]{3,5}\\b
Dies gleicht Zahlen mit 3 bis 5 Ziffern ab: 123, 1234, 12345, aber nicht 12 oder 123456.
Für spezifische sich wiederholende Muster:
(spam){2,3}
Dies gleicht ab: spamspam, spamspamspam.
Korrektes Anwenden von Wortgrenzen
Ohne Grenzen:
free
Dies gleicht ab: free, freedom, carefree.
Mit Grenzen:
\\bfree\\b
Dies gleicht nur free ab, aber nicht freedom oder carefree.
Korrekte Behandlung von Unicode-Zeichen
Korrekter Ansatz:
(?:^|\\s)(ö|oe)zel\\b
Dies gleicht özel, oezel an Wortgrenzen ab, auch mit Unicode-Zeichen.
Falscher Ansatz:
\\bözel\\b
Dies funktioniert möglicherweise nicht korrekt mit dem türkischen Zeichen ö.
Zusätzliche Informationen
Sie können Regex-Ausdrücke unter https://regex101.com/ testen. Wenn Sie dies tun, stellen Sie sicher, dass Sie die Regex-Variante auf ECMAScript umstellen.
Regex-Erfassung und -Ersetzung werden in „Watched Words“ nicht unterstützt, nur die Übereinstimmung. Daher funktioniert dies nicht bei Link- oder Ersetzungsaktionen.