Usando Regex con Palabras Observadas

: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, 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.org para 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.

:information_source: Para usar expresiones regulares (regex) en palabras vigiladas, primero debe activar la configuración del sitio watched words regular expressions.

:warning: 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

:information_source: 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.

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