Este tema explica cómo usar expresiones regulares (regex) de manera efectiva dentro de la función Watched Words de Discourse.
Si su sitio está alojado con Discourse, comuníquese con team@discourse.org si desea habilitar esta configuración.
Las expresiones regulares (regex) son una herramienta poderosa para definir patrones de búsqueda. Puede usar regex en la función Watched Words para mejorar la precisión y flexibilidad del filtrado de palabras en su sitio de Discourse.
Para usar expresiones regulares (regex) en palabras vigiladas, primero debe activar la configuración del sitio
watched words regular expressions.
Regex es extremadamente poderoso y, por lo tanto, peligroso. Una declaración regex escrita incorrectamente puede causar problemas a sus usuarios. Pruebe sus declaraciones regex en instancias no productivas antes de publicarlas.
Patrones Regex de ejemplo
Aquí hay algunos patrones regex comunes y cómo se pueden emplear:
Insensibilidad a mayúsculas y minúsculas
Por defecto, Discourse coincide con las formas en mayúsculas y minúsculas de una palabra.
thread
Esto coincidirá con thread, THREAD y thReAd.
Alternativas de caracteres
Use alternativas de caracteres para expandir sus coincidencias.
(t|7)hr(3|e)(4|a)d
Esto coincidirá con todos los casos anteriores, además de thr3ad, 7hread y thr34d.
threads?\\S+
Esto coincidirá con thread y threads, pero no con threaded o threading.
Límites de palabras
Los patrones regex pueden coincidir involuntariamente con partes de palabras. Use límites de palabras para evitar coincidencias parciales.
\\bthreads?\\b
Esto coincide con thread y threads, pero evita coincidencias como threadlike o unthreading.
Manejo de caracteres Unicode
Los límites de palabras estándar pueden fallar con caracteres Unicode. Cree límites para caracteres que no se manejan bien con la regex de JavaScript.
gr(ü|ue)(ß|ss)e
Esto coincide con todas las formas comúnmente escritas de la palabra grüße, incluyendo gruesse y GRÜSSE.
Supongamos que desea bloquear la palabra Über, pero no Übersicht. Usar límites de palabras como \\b(ü|ue)ber\\b no funciona porque algunas de las banderas de límites de palabras de la regex de JavaScript no manejan caracteres Unicode. En su lugar, tiene que crear sus propios límites.
(?:^|\\s)(ü|ue)ber\\b
Esto ahora coincidirá apropiadamente con Über y ueber, pero no con Übersicht o uebersicht.
Captura de sustituciones de caracteres deliberadas
Para capturar palabras donde los usuarios sustituyen números o caracteres especiales por letras:
\\bp[a@]ssw[o0]rd\\b
Esto coincide con: password, p@ssword, passw0rd, p@ssw0rd, pero no con mypassword o password123.
Manejo de caracteres con puntuación en medio
Para capturar intentos de evadir filtros insertando puntuación:
\\bs\\W*p\\W*a\\W*m\\b
Esto coincide con: spam, s.p.a.m, s-p-a-m, s_p_a_m, pero no con spammy o myspam.
Coincidencia de múltiples variaciones de palabras
Para hacer coincidir frases que pueden aparecer con diferentes formas de palabras:
\\b(contact|email|reach)( us| me)?\\b
Esto coincide con: contact, contact us, contact me, email, email us, email me, reach, reach us, reach me.
Detección de patrones de correo electrónico
Para capturar patrones genéricos de direcciones de correo electrónico:
\\b[\\w.%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}\\b
Esto coincide con: user@example.com, my.name@sub.domain.co.uk, user+tag@domain.org.
Búsqueda de variaciones de hashtags
Para hacer coincidir hashtags con diferentes mayúsculas o ligeras variaciones:
\\#(disc[o0]urse|f[o0]rum)\\b
Esto coincide con: #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum, pero no con #discourseengine o #forums.
Detección de patrones repetitivos
Para capturar caracteres repetidos que podrían indicar contenido de spam:
([a-zA-Z])\\1{3,}
Esto coincide con: aaaample, helllllo, yessssss, detectando cualquier letra repetida 4 o más veces seguidas.
Búsqueda de URLs con o sin protocolo
\\b(?:https?:\\/\\/)?[\\w-]+(\\.[\\w-]+)+\\b
Esto coincide con: example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org.
Evitar clases de caracteres anidadas
Correcto:
(hold)?
Esto coincide correctamente con la palabra opcional “hold”.
O si desea alternativas de caracteres:
[h][o0][l1][d]
Esto coincide con: hold, h0ld, ho1d, h01d.
Incorrecto:
[h[o0][l1]d]?
Esto intenta anidar incorrectamente clases de caracteres y coincidirá con cualquier carácter individual de h, o, 0, l, 1 o d, lo que hace que coincida con palabras como had, old, etc.
Uso de paréntesis para palabras opcionales
Correcto:
forum(s)?
Esto coincide correctamente con: forum, forums.
Incorrecto:
forum[s]?
Esto coincide con “forum” seguido de una “s” opcional, pero usa una clase de caracteres innecesariamente.
Uso adecuado de clases de caracteres
Correcto:
bad word
Para hacer coincidir la frase “bad word”.
O para un ejemplo de clase de caracteres:
[bB][aA][dD]
Esto coincide con: bad, Bad, bAd, BAD, etc.
Incorrecto:
[bad word]
Esto coincide con cualquier carácter individual de b, a, d, w, o, r o d, no con la frase “bad word”.
Uso efectivo de cuantificadores
\\b[0-9]{3,5}\\b
Esto coincide con números de 3 a 5 dígitos: 123, 1234, 12345, pero no con 12 o 123456.
Para patrones repetitivos específicos:
(spam){2,3}
Esto coincide con: spamspam, spamspamspam.
Aplicación adecuada de límites de palabras
Sin límites:
free
Esto coincide con: free, freedom, carefree.
Con límites:
\\bfree\\b
Esto coincide solo con: free, pero no con freedom o carefree.
Manejo correcto de caracteres Unicode
Enfoque correcto:
(?:^|\\s)(ö|oe)zel\\b
Esto coincide con: özel, oezel en los límites de las palabras, incluso con caracteres Unicode.
Enfoque incorrecto:
\\bözel\\b
Esto puede no funcionar correctamente con el carácter turco ö.
Información adicional
Puede probar expresiones Regex en https://regex101.com/. Si lo hace, asegúrese de cambiar el sabor de regex a ECMAScript.
La captura y el reemplazo de Regex no son compatibles en Palabras Vigiladas, solo la coincidencia, por lo que esto no funcionará en las acciones de enlace o reemplazo.