Usar expresiones regulares con palabras vigiladas

:bookmark: Este tema explica cómo usar eficazmente las expresiones regulares (regex) dentro de la función Palabras vigiladas de Discourse.

:discourse: Para los sitios en nuestro alojamiento, estas configuraciones están ocultas. Los clientes con planes de alojamiento de pago pueden contactar a nuestro equipo de soporte en team@discourse.org para solicitar el uso de regex con Palabras vigiladas.
Nota: Esta función no está disponible en nuestro plan de alojamiento gratuito.

Las expresiones regulares (regex) son una herramienta poderosa para definir patrones de búsqueda. Puedes usar regex en la función Palabras vigiladas para mejorar la precisión y flexibilidad del filtrado de palabras en tu sitio de Discourse.

:information_source: Para usar expresiones regulares (regex) en las palabras vigiladas, primero debes activar la configuración del sitio watched_words_regular_expressions.

:warning: Regex es extremadamente poderoso y, por tanto, peligroso. Una declaración regex escrita incorrectamente puede causar problemas a tus usuarios. Prueba tus declaraciones regex en instancias que no sean de producción antes de ponerlas en marcha.

Ejemplos de patrones Regex

Aquí tienes algunos patrones regex comunes y cómo pueden emplearse:

Insensibilidad a mayúsculas y minúsculas

Por defecto, Discourse coincide tanto con las formas en mayúsculas como en minúsculas de una palabra.

thread

Esto coincidirá con thread, THREAD y thReAd.

Alternativas de caracteres

Usa alternativas de caracteres para ampliar tus 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 ni threading.

Límites de palabras

Los patrones regex pueden coincidir inadvertidamente con partes de palabras. Usa 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. Crea límites para caracteres que JavaScript regex no maneja bien.

gr(ü|ue)(ß|ss)e

Esto coincide con todas las formas comúnmente escritas de la palabra grüße, incluyendo gruesse y GRÜSSE.

Digamos que quieres 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 palabras de regex de JavaScript no manejan caracteres Unicode. En su lugar, debes crear tus propios límites.

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

Ahora esto coincidirá apropiadamente con Über y ueber, pero no con Übersicht ni uebersicht.

Detectar sustituciones deliberadas de caracteres

Para detectar 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 ni password123.

Manejo de caracteres con puntuación intermedia

Para detectar intentos de eludir 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 ni myspam.

Coincidir múltiples variaciones de palabras

Para coincidir frases que puedan 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.

Detectar patrones de correo electrónico

Para detectar 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.

Encontrar variaciones de hashtags

Para coincidir hashtags con diferentes mayúsculas/minúsculas o ligeras variaciones:

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

Esto coincide con: #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum, pero no con #discourseengine ni #forums.

Detectar patrones repetitivos

Para detectar caracteres repetidos que puedan indicar contenido spam:

([a-zA-Z])\1{3,}

Esto coincide con: aaaample, helllllo, yessssss, detectando cualquier letra repetida 4 o más veces consecutivamente.

Encontrar 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 quieres alternativas de caracteres:

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

Esto coincide con: hold, h0ld, ho1d, h01d.

Incorrecto:

[h[o0][l1]d]?

Esto intenta incorrectamente anidar 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.

Usar paréntesis para palabras opcionales

Correcto:

forum(s)?

Esto coincide correctamente con: forum, forums.

Incorrecto:

forum[s]?

Esto coincide con “forum” seguido de un “s” opcional, pero usa una clase de caracteres innecesariamente.

Uso correcto de clases 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”.

Usar cuantificadores eficazmente

\b[0-9]{3,5}\b

Esto coincide con números de 3 a 5 dígitos: 123, 1234, 12345, pero no con 12 ni 123456.

Para patrones repetitivos específicos:

(spam){2,3}

Esto coincide con: spamspam, spamspamspam.

Aplicar límites de palabras correctamente

Sin límites:

free

Esto coincide con: free, freedom, carefree.

Con límites:

\bfree\b

Esto coincide solo con: free, pero no con freedom ni carefree.

Manejo correcto de caracteres Unicode

Enfoque correcto:

(?:^|\s)(ö|oe)zel\b

Esto coincide con: özel, oezel en límites de palabras, incluso con caracteres Unicode.

Enfoque incorrecto:

\bözel\b

Esto puede no funcionar correctamente con el carácter turco ö.

Información adicional

:information_source: Puedes probar expresiones Regex en https://regex101.com/. Si lo haces, asegúrate de cambiar el estilo de regex a ECMAScript.

Las referencias inversas de grupos de captura de Regex (por ejemplo, \1 en cadenas de reemplazo) no son compatibles en los valores de reemplazo de Palabras vigiladas. Las acciones de reemplazo y enlace sí admiten regex para la coincidencia, pero el reemplazo siempre es una cadena literal.

13 Me gusta

Perdona mi novatada, pero no pude encontrar la configuración del sitio para watched words regular expressions en ningún lado. También busqué regex, regular expression y otras variantes, pero no encontré nada que pareciera que habilitaría regex para watched words. ¿Tienes el slug de la configuración del sitio donde esto se podría habilitar (instancia alojada en la nube)?

EDITAR la respuesta estaba justo arriba y la encontré aquí

2 Me gusta