Usare Regex con le Parole Seguite

:bookmark: Questo argomento spiega come utilizzare efficacemente le espressioni regolari (regex) all’interno della funzione Watched Words 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 a team@discourse.org per richiedere le regex con le Parole Seguite.
Nota: Questa funzione non è disponibile sul nostro piano di hosting Gratuito.

Le espressioni regolari (regex) sono uno strumento potente per definire modelli di ricerca. È possibile utilizzare le regex nella funzione Watched Words 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 seguite, devi prima attivare l’impostazione del sito watched words regular expressions.

:warning: La Regex è estremamente potente e quindi pericolosa. 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 online.

Esempi di modelli Regex

Ecco alcuni modelli regex comuni e come possono essere impiegati:

Case-insensitivity (Insensibilità alle maiuscole/minuscole)

Per impostazione predefinita, Discourse confronta le forme sia 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, più thr3ad, 7hread e thr34d.

threads?\\b

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

Word boundaries (Confini di parola)

I modelli Regex possono involontariamente corrispondere a 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 possono fallire con i caratteri Unicode. Crea confini per i caratteri non gestiti bene 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’utilizzo di confini di parola come \b(ü|ue)ber\b non funziona perché alcuni flag di parola delle regex JavaScript non gestiscono i caratteri Unicode. Invece, devi creare i tuoi confini.

(?:^|\s)(ü|ue)ber\b

Questo corrisponderà ora appropriatamente 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 mypassword o password123

Gestione dei caratteri con punteggiatura in mezzo

Per catturare i tentativi di eludere i filtri inserendo la punteggiatura:

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

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

Corrispondenza di più variazioni di parole

Per la corrispondenza di frasi che potrebbero apparire con diverse forme di parola:

\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 modelli di indirizzi email

Per catturare modelli 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 variazioni di hashtag

Per far corrispondere hashtag con diversa capitalizzazione o lievi variazioni:

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

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

Rilevamento di modelli ripetitivi

Per catturare caratteri ripetuti che potrebbero indicare contenuto 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 le classi di caratteri annidate

Corretto:

(hold)?

Questo corrisponde correttamente alla parola opzionale “hold”

Oppure se si desiderano alternative di caratteri:

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

Questo corrisponde a: hold, h0ld, ho1d, h01d

Errato:

[h[o0][l1]d]?

Questo tenta in modo errato 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 una classe di caratteri inutilmente.

Corretto utilizzo della classe di caratteri

Corretto:

bad word

Per far 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 a 5 cifre: 123, 1234, 12345, ma non 12 o 123456

Per modelli 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

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 cambiare il sapore regex in ECMAScript.

I back-reference dei gruppi di cattura Regex (es. \1 nelle stringhe di sostituzione) non sono supportati nei valori di sostituzione di Watched Words. Le azioni di sostituzione e link 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