Utilizzo di Regex con Parole Monitorate

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

:discourse: Se il tuo sito è ospitato con Discourse, contatta team@discourse.org se desideri abilitare questa impostazione.

Le espressioni regolari (regex) sono uno strumento potente per definire pattern di ricerca. Puoi utilizzare le regex nella funzionalità Parole Monitorate per migliorare l’accuratezza e la flessibilità del filtraggio delle parole sul tuo sito Discourse.

:information_source: Per utilizzare le espressioni regolari (regex) nelle parole monitorate, devi prima attivare l’impostazione del sito watched words regular expressions.

:warning: Le regex sono estremamente potenti e quindi pericolose. Un’istruzione regex scritta in modo errato può causare problemi ai tuoi utenti. Testa le tue istruzioni regex su istanze non di produzione prima di andare in produzione.

Esempi di pattern Regex

Ecco alcuni pattern regex comuni e come possono essere impiegati:

InsensibilitĂ  alle maiuscole/minuscole

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

thread

Questo corrisponderĂ  a thread, THREAD e thReAd.

Alternative di caratteri

Usa le alternative di caratteri per espandere le tue corrispondenze.

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

Questo corrisponderĂ  a tutti i casi sopra, piĂą thr3ad, 7hread e thr34d.

threads?\S+

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

Confini di parola

I pattern regex possono corrispondere involontariamente a parti di parole. Usa 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 JavaScript.

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

Questo corrisponde a tutte le forme comunemente scritte della parola grĂĽĂźe, incluse gruesse e GRĂśSSE.

Supponiamo che tu voglia bloccare la parola Über, ma non Übersicht. L’uso di confini di parola come \b(ü|ue)ber\b non funziona perché alcuni flag di confine di parola delle regex 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.

Catturare sostituzioni di caratteri deliberate

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 dei caratteri con punteggiatura in mezzo

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, s_p_a_m, ma non a spammy o myspam.

Corrispondenza di piĂą variazioni di parole

Per corrispondere a 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.

Ricerca di variazioni di hashtag

Per corrispondere a hashtag con diverse maiuscole o leggere variazioni:

\#(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.

Ricerca di 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 annidate

Corretto:

(hold)?

Questo corrisponde correttamente alla parola opzionale “hold”.

Oppure se vuoi alternative di caratteri:

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

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

Errato:

[h[o0][l1]d]?

Questo tenta erroneamente di annidare le classi di caratteri e corrisponderĂ  a qualsiasi singolo carattere tra h, o, 0, l, 1 o d, facendolo corrispondere a 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 una “s” opzionale, ma utilizza inutilmente una classe di caratteri.

Uso corretto delle classi di caratteri

Corretto:

bad word

Per corrispondere alla 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 da 3 a 5 cifre: 123, 1234, 12345, ma non 12 o 123456.

Per pattern specifici ripetuti:

(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 ö.

Informazioni aggiuntive

:information_source: Puoi testare le espressioni Regex su https://regex101.com/. Se lo fai, assicurati di impostare il flavour regex su ECMAScript.

La cattura e la sostituzione di Regex non sono supportate nelle Parole Monitorate, solo il matching, quindi questo non funzionerĂ  sui link o sulle azioni di sostituzione.

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