Регулярное выражение для обнаружения Zalgo - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю систему фильтрации сообщений, которая обнаруживает z͎͗ͣḁ̵̑l̉̃ͦg̐̓̒o͓̔ͥ.

Мое текущее регулярное выражение /([^\u0009-\u02b7\u2000-\u20bf\u2122\u0308]|(?![^aeiouy])\u0308)/gm, но это также фиксирует эмодзи.

Регулярное выражение должно фильтровать все или t̶e̶x̴t̸ ̸l̵i̶k̷e̸ ̵t̷h̵i̷s̴, но не должны захватывать эмодзи. ?

1 Ответ

2 голосов
/ 30 апреля 2020

Вот как проверить

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

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

Вот как конвертировать

console.log(
  decodeURIComponent(
    encodeURIComponent("w̵̢̃2ë̸̩́ị̵̽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
  )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...