Questo argomento spiega come utilizzare efficacemente le espressioni regolari (regex) all’interno della funzione Watched Words di 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.orgper 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.
Per utilizzare le espressioni regolari (regex) nelle parole seguite, devi prima attivare l’impostazione del sito
watched words regular expressions.
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.
threadQuesto corrisponderà a
thread,THREADethReAd.Alternative di caratteri
Utilizza le alternative di caratteri per espandere le tue corrispondenze.
(t|7)hr(3|e)(4|a)dQuesto corrisponderà a tutti i casi sopra, più
thr3ad,7hreadethr34d.
threads?\\bQuesto corrisponderà a
threadethreadsma non athreadedothreading.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?\bQuesto corrisponde a
threadethreadsma evita corrispondenze comethreadlikeounthreading.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)eQuesto corrisponde a tutte le forme comunemente scritte della parola grüße — incluse
gruesseeGRÜSSESupponiamo che tu voglia bloccare la parola
Über, ma nonÜbersicht. L’utilizzo di confini di parola come\b(ü|ue)ber\bnon funziona perché alcuni flag di parola delle regex JavaScript non gestiscono i caratteri Unicode. Invece, devi creare i tuoi confini.
(?:^|\s)(ü|ue)ber\bQuesto corrisponderà ora appropriatamente a
Übereueber, ma non aÜbersichtouebersicht.Catturare sostituzioni di caratteri deliberate
Per catturare parole in cui gli utenti sostituiscono numeri o caratteri speciali con lettere:
\bp[a@]ssw[o0]rd\bQuesto corrisponde a:
password,p@ssword,passw0rd,p@ssw0rd, ma nonmypasswordopassword123Gestione dei caratteri con punteggiatura in mezzo
Per catturare i tentativi di eludere i filtri inserendo la punteggiatura:
\bs\W*p\W*a\W*m\bQuesto corrisponde a:
spam,s.p.a.m,s-p-a-m, ma nons_p_a_m(il trattino basso è un carattere di parola),spammyomyspamCorrispondenza di più variazioni di parole
Per la corrispondenza di frasi che potrebbero apparire con diverse forme di parola:
\b(contact|email|reach)( us| me)?\bQuesto corrisponde a:
contact,contact us,contact me,email us,email me,reach,reach us,reach meRilevamento di modelli di indirizzi email
Per catturare modelli generici di indirizzi email:
\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}\bQuesto corrisponde a:
user@example.com,my.name@sub.domain.co.uk,user+tag@domain.orgTrovare variazioni di hashtag
Per far corrispondere hashtag con diversa capitalizzazione o lievi variazioni:
\#(disc[o0]urse|f[o0]rum)\bQuesto corrisponde a:
#discourse,#DISCOURSE,#disc0urse,#forum,#f0rum, ma non#discourseengineo#forumsRilevamento 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 seguitoTrovare URL con o senza protocollo
\b(?:https?:\/\/)?[\w-]+(?:\.[\w-]+)+\bQuesto corrisponde a:
example.com,sub.domain.org,https://discourse.org,http://meta.discourse.orgEvitare 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,h01dErrato:
[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,1od, facendolo corrispondere a parole comehad,old, ecc.Utilizzo delle parentesi per parole opzionali
Corretto:
forum(s)?Questo corrisponde correttamente a:
forum,forumsErrato:
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 wordPer 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,rod, non alla frase “bad word”.Utilizzo efficace dei quantificatori
\b[0-9]{3,5}\bQuesto corrisponde a numeri con 3 a 5 cifre:
123,1234,12345, ma non12o123456Per modelli ripetitivi specifici:
(spam){2,3}Questo corrisponde a:
spamspam,spamspamspamApplicazione corretta dei confini di parola
Senza confini:
freeQuesto corrisponde a:
free,freedom,carefreeCon confini:
\bfree\bQuesto corrisponde solo a:
free, ma non afreedomocarefreeGestione corretta dei caratteri Unicode
Approccio corretto:
(?:^|\s)(ö|oe)zel\bQuesto corrisponde a:
özel,oezelai confini di parola, anche con caratteri UnicodeApproccio errato:
\bözel\bPotrebbe non funzionare correttamente con il carattere turco ö.
Informazioni aggiuntive
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.
\1nelle 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