Este tema explica cómo usar eficazmente las expresiones regulares (regex) dentro de la función Palabras Vigiladas de Discourse.
Para los sitios en nuestro alojamiento, esta configuración está oculta. Los clientes con planes de alojamiento de pago pueden ponerse en contacto con nuestro equipo de soporte en
team@discourse.orgpara solicitar regex con Palabras Vigiladas.
Nota: Esta función no está disponible en nuestro plan de alojamiento Gratuito.
Las expresiones regulares (regex) son una herramienta potente para definir patrones de búsqueda. Puede usar regex en la función Palabras Vigiladas 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 potente y, por lo tanto, peligroso. Una instrucción regex escrita incorrectamente puede causar problemas a sus usuarios. Pruebe sus instrucciones regex en instancias que no sean de producción 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 ampliar 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?\b
Esto coincidirá con thread y threads, pero no con threaded o threading.
Límites de palabra
Los patrones regex pueden coincidir involuntariamente con partes de palabras. Use límites de palabra 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 palabra estándar pueden fallar con caracteres Unicode. Cree límites para caracteres que no son bien manejados por la regex de JavaScript.
gr(ü|ue)(ß|ss)e
Esto coincide con todas las formas comunes escritas de la palabra grüße, incluyendo gruesse y GRÜSSE
Supongamos que quiere bloquear la palabra Über, pero no Übersicht. Usar límites de palabra como \b(ü|ue)ber\b no funciona porque algunas de las banderas de palabra 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, pero no con s_p_a_m (el guion bajo es un carácter de palabra), spammy o myspam
Coincidencia de múltiples variaciones de palabras
Para coincidir con 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 coincidir con hashtags con diferente uso de 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, haciendo 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 utiliza una clase de caracteres innecesariamente.
Uso adecuado de la clase de caracteres
Correcto:
bad word
Para coincidir con 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 eficaz de cuantificadores
\b[0-9]{3,5}\b
Esto coincide con números con 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 los límites de palabra
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 límites de palabra, incluso con caracteres Unicode
Enfoque incorrecto:
\bözel\b
Esto podría 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.
Las retroreferencias de grupo de captura de Regex (por ejemplo, \1 en cadenas de reemplazo) no son compatibles con los valores de reemplazo de Palabras Vigiladas. Las acciones de reemplazo y enlace admiten regex para la coincidencia, pero el reemplazo es siempre una cadena literal.