javascript 正则表达式检测Zalgo

jgovgodb  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(114)

我正在创建一个消息过滤系统,它可以检测z a l g o。
我目前的正则表达式是/([^\u0009-\u02b7\u2000-\u20bf\u2122\u0308]|(?![^aeiouy])\u0308)/gm,但这也捕获表情符号。
正则表达式应该过滤所有w e i r d t e x t l i k e t h i s或t e x t l i k e t h i s,但不应该捕获表情符号。🤔

ql3eal8s

ql3eal8s1#

下面是如何测试

const re = /%CC%/g
const hasZalgo = txt => re.test(encodeURIComponent(txt));  

console.log(hasZalgo("w̵̢̃ë̸̩́ị̵̽r̴̺̆d̴̘̕ ̴͎́ẗ̷͕́e̷̳̅x̷̮́ṱ̸̏ ̸̜͒ḻ̵̎i̶̧͐k̸̗̈ě̸͖ ̸̥̄t̶̛̤h̸̰̔i̵̿͜ş̴̛ 222 🤔"))
console.log(hasZalgo("Weird text like %CC% this 🤔"))

以下是如何转换

console.log(
  decodeURIComponent(
    encodeURIComponent("w̵̢̃ë̸̩́ị̵̽r̴̺̆d̴̘̕ ̴͎́ẗ̷͕́e̷̳̅x̷̮́ṱ̸̏ ̸̜͒ḻ̵̎i̶̧͐k̸̗̈ě̸͖ ̸̥̄t̶̛̤h̸̰̔i̵̿͜ş̴̛ 222 🤔")
    .replace(/%CC(%[A-Z0-9]{2})+%20/g," ") // replace space
    .replace(/%CC(%[A-Z0-9]{2})+(\w)/g,"$2") // replace anything else
  )
)

相关问题