Verwendung von Regex mit beobachteten Wörtern

:bookmark: Dieses Thema erklärt, wie reguläre Ausdrücke (Regex) effektiv in der Funktion Watched Words von Discourse verwendet werden.

:discourse: 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.

:information_source: Um reguläre Ausdrücke (Regex) in „Watched Words“ zu verwenden, müssen Sie zuerst die Website-Einstellung watched words regular expressions aktivieren.

:warning: 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

:information_source: 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.

13 „Gefällt mir“

Verzeihen Sie meine Unwissenheit, aber ich konnte die Website-Einstellung für watched words regular expressions nirgends finden. Ich habe auch nach regex, regular expression und anderen Varianten gesucht, aber nichts gefunden, das so aussah, als würde es Regex für beobachtete Wörter aktivieren. Haben Sie den Slug zu den Website-Einstellungen, wo dies aktiviert werden kann (Cloud-gehostete Instanz)?

EDIT Die Antwort war direkt darüber und hier gefunden: https://meta.discourse.org/t/hidden-settings-on-discourse-hosted-sites/310574

2 „Gefällt mir“