Usando expresiones regulares con palabras vigiladas

:bookmark: Este tema explica cómo usar expresiones regulares (regex) de manera efectiva dentro de la función Watched Words de Discourse.

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

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

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

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