Questo argomento spiega come utilizzare efficacemente le espressioni regolari (regex) nella funzionalitĂ Parole Monitorate di 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.
Per utilizzare le espressioni regolari (regex) nelle parole monitorate, devi prima attivare l’impostazione del sito
watched words regular expressions.
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
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.