Regex mit beobachteten Wörtern verwenden

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

:discourse: Für Websites, die bei uns gehostet werden, sind diese Einstellungen ausgeblendet. Kunden mit kostenpflichtigen Hosting-Plänen können unser Support-Team unter team@discourse.org kontaktieren, um Regex für Beobachtete Wörter anzufordern.
Hinweis: Diese Funktion ist auf unserem kostenlosen Hosting-Plan nicht verfügbar.

Reguläre Ausdrücke (Regex) sind ein mächtiges Werkzeug zur Definition von Suchmustern. Sie können Regex in der Watched Words-Funktion verwenden, um die Genauigkeit und Flexibilität der Wortfilterung auf Ihrer Discourse-Website zu verbessern.

:information_source: Um reguläre Ausdrücke (Regex) in beobachteten Wörtern 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.

Umgang mit Unicode-Zeichen

Standard-Wortgrenzen funktionieren bei Unicode-Zeichen möglicherweise nicht. 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-Wort-Flags Unicode-Zeichen nicht 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.

Erfassen beabsichtigter Zeichensubstitutionen

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

Umgang mit Zeichen mit dazwischen liegender Interpunktion

Um Versuche zu erkennen, Filter durch das Einfügen von Interpunktion 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

Mehrere Wortvariationen abgleichen

Zum Abgleichen von Phrasen, die in verschiedenen Wortformen auftreten 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

Erkennen von E-Mail-Mustern

Um allgemeine 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

Erkennen sich wiederholender Muster

Um wiederholte Zeichen zu erfassen, die auf Spam-Inhalte hindeuten könnten:

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

Dies gleicht ab: aaaample, helllllo, yessssss, erkennt jeden Buchstaben, der 4 oder mehr Mal hintereinander wiederholt wird

URLs mit oder ohne Protokoll finden

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

Dies gleicht ab: example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org

Vermeiden von verschachtelten Zeichenklassen

Korrekt:

(hold)?

Dies gleicht das optionale Wort „hold“ korrekt 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, was dazu führt, dass 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 den Ausdruck „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 den Ausdruck „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 ab: free, aber nicht freedom oder carefree

Korrekter Umgang mit Unicode-Zeichen

Korrekter Ansatz:

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

Dies gleicht ab: özel, oezel an Wortgrenzen, auch bei 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. Stellen Sie dort sicher, dass Sie die Regex-Sprachversion auf ECMAScript umstellen.

Regex-Erfassung und -Ersetzung werden in Watched Words nicht unterstützt, nur das Abgleichen. Daher funktioniert dies nicht bei den Aktionen „link“ oder „replace“.

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“