Utilizzare le espressioni regolari con parole monitorate

:bookmark: Questo argomento spiega come utilizzare efficacemente le espressioni regolari (regex) nella funzionalitĂ  Parole Osservate di Discourse.

:discourse: Per i siti ospitati da noi, queste impostazioni sono nascoste. I clienti con piani di hosting a pagamento possono contattare il nostro team di supporto all’indirizzo team@discourse.org per richiedere l’uso di regex con le Parole Osservate.
Nota: Questa funzionalità non è disponibile nel piano di hosting Gratuito.

Le espressioni regolari (regex) sono uno strumento potente per definire modelli di ricerca. Puoi utilizzare le regex nella funzionalitĂ  Parole Osservate per migliorare precisione e flessibilitĂ  nel filtraggio delle parole sul tuo sito Discourse.

:information_source: Per utilizzare le espressioni regolari (regex) nelle parole osservate, devi prima attivare l’impostazione del sito watched_words_regular_expressions.

:warning: Le regex sono estremamente potenti e quindi pericolose. Una dichiarazione regex scritta in modo errato può causare problemi agli utenti. Testa le tue espressioni regex su istanze non di produzione prima di metterle in produzione.

Esempi di pattern Regex

Ecco alcuni pattern regex comuni e come possono essere utilizzati:

InsensibilitĂ  alle maiuscole/minuscole

Per impostazione predefinita, Discourse corrisponde sia le forme maiuscole che minuscole di una parola.

thread

Questo corrisponderĂ  a thread, THREAD e thReAd.

Alternative di caratteri

Utilizza le alternative di caratteri per espandere le tue corrispondenze.

(t|7)hr(3|e)(4|a)d

Questo corrisponderĂ  a tutti i casi sopra riportati, oltre a thr3ad, 7hread e thr34d.

threads?\b

Questo corrisponderĂ  a thread e threads, ma non a threaded o threading.

Confini di parola

I pattern regex possono corrispondere involontariamente parti di parole. Utilizza i confini di parola per evitare corrispondenze parziali.

\bthreads?\b

Questo corrisponde a thread e threads, ma evita corrispondenze come threadlike o unthreading.

Gestione dei caratteri Unicode

I confini di parola standard potrebbero non funzionare con i caratteri Unicode. Crea confini per i caratteri non gestiti correttamente dalle regex di JavaScript.

gr(ĂĽ|ue)(Ăź|ss)e

Questo corrisponde a tutte le forme comunemente scritte della parola grüße — inclusi gruesse e GRÜSSE.

Supponiamo di voler bloccare la parola Über, ma non Übersicht. Utilizzare confini di parola come \b(ü|ue)ber\b non funziona perché alcuni flag delle regex di JavaScript non gestiscono i caratteri Unicode. Invece, devi creare i tuoi confini.

(?:^|\s)(ĂĽ|ue)ber\b

Questo corrisponderĂ  ora correttamente a Ăśber e ueber, ma non a Ăśbersicht o uebersicht.

Cattura di sostituzioni intenzionali di caratteri

Per catturare parole in cui gli utenti sostituiscono numeri o caratteri speciali con lettere:

\bp[a@]ssw[o0]rd\b

Questo corrisponde a: password, p@ssword, passw0rd, p@ssw0rd, ma non a mypassword o password123.

Gestione di caratteri con punteggiatura intermedia

Per catturare tentativi di eludere i filtri inserendo punteggiatura:

\bs\W*p\W*a\W*m\b

Questo corrisponde a: spam, s.p.a.m, s-p-a-m, ma non a s_p_a_m (l’underscore è un carattere di parola), spammy o myspam.

Corrispondenza di piĂą varianti di parole

Per corrispondere frasi che potrebbero apparire con diverse forme di parole:

\b(contact|email|reach)( us| me)?\b

Questo corrisponde a: contact, contact us, contact me, email, email us, email me, reach, reach us, reach me.

Rilevamento di pattern di email

Per catturare pattern generici di indirizzi email:

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

Questo corrisponde a: user@example.com, my.name@sub.domain.co.uk, user+tag@domain.org.

Trovare varianti di hashtag

Per corrispondere hashtag con diverse maiuscole/minuscole o leggere varianti:

\#(disc[o0]urse|f[o0]rum)\b

Questo corrisponde a: #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum, ma non a #discourseengine o #forums.

Rilevamento di pattern ripetitivi

Per catturare caratteri ripetuti che potrebbero indicare contenuti spam:

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

Questo corrisponde a: aaaample, helllllo, yessssss, rilevando qualsiasi lettera ripetuta 4 o piĂą volte di seguito.

Trovare URL con o senza protocollo

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

Questo corrisponde a: example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org.

Evitare classi di caratteri nidificate

Corretto:

(hold)?

Questo corrisponde correttamente alla parola opzionale “hold”.

Oppure, se desideri alternative di caratteri:

[h][o0][l1][d]

Questo corrisponde a: hold, h0ld, ho1d, h01d.

Errato:

[h[o0][l1]d]?

Questo tenta erroneamente di nidificare classi di caratteri e corrisponderĂ  a qualsiasi singolo carattere tra h, o, 0, l, 1 o d, facendo corrispondere parole come had, old, ecc.

Utilizzo delle parentesi per parole opzionali

Corretto:

forum(s)?

Questo corrisponde correttamente a: forum, forums.

Errato:

forum[s]?

Questo corrisponde a “forum” seguito da un “s” opzionale, ma utilizza una classe di caratteri inutilmente.

Uso corretto delle classi di caratteri

Corretto:

bad word

Per corrispondere la frase “bad word”.

Oppure, per un esempio di classe di caratteri:

[bB][aA][dD]

Questo corrisponde a: bad, Bad, bAd, BAD, ecc.

Errato:

[bad word]

Questo corrisponde a qualsiasi singolo carattere tra b, a, d, w, o, r o d, non alla frase “bad word”.

Utilizzo efficace dei quantificatori

\b[0-9]{3,5}\b

Questo corrisponde a numeri con 3-5 cifre: 123, 1234, 12345, ma non a 12 o 123456.

Per pattern ripetitivi specifici:

(spam){2,3}

Questo corrisponde a: spamspam, spamspamspam.

Applicazione corretta dei confini di parola

Senza confini:

free

Questo corrisponde a: free, freedom, carefree.

Con confini:

\bfree\b

Questo corrisponde solo a: free, ma non a freedom o carefree.

Gestione corretta dei caratteri Unicode

Approccio corretto:

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

Questo corrisponde a: özel, oezel ai confini di parola, anche con caratteri Unicode.

Approccio errato:

\bözel\b

Questo potrebbe non funzionare correttamente con il carattere turco ö.

Ulteriori informazioni

:information_source: Puoi testare le espressioni regex su https://regex101.com/. Se lo fai, assicurati di passare il flavor regex a ECMAScript.

I riferimenti inversi ai gruppi di cattura delle regex (ad esempio, \1 nelle stringhe di sostituzione) non sono supportati nei valori di sostituzione delle Parole Osservate. Le azioni di sostituzione e collegamento supportano le regex per la corrispondenza, ma la sostituzione è sempre una stringa letterale.

13 Mi Piace

Perdonate la mia inesperienza, ma non sono riuscito a trovare da nessuna parte l’impostazione del sito per espressioni regolari di parole monitorate. Ho anche cercato regex, espressione regolare e altre varianti, ma non ho trovato nulla che sembrasse abilitare le regex per le parole monitorate. Avete il slug delle impostazioni del sito dove questo può essere abilitato (istanza ospitata nel cloud)?

MODIFICA la risposta era appena sopra e trovata qui

2 Mi Piace