Я ищу, чтобы обнаружить неанглийские символы клавиатуры в приложении чата.
Сейчас я использую следующее регулярное выражение для определения языков, например русский и мандарин.
const languageRegEx = /[^\x00-\x7F]+/gi;
Это работало хорошо, но теперь я столкнулся с проблемой, когда использование смайликов в чате обнаруживается с помощью приведенного выше регулярного выражения.
Я попытался удалить смайлики из строки ввода, используя следующее:
const ranges = [
'[\u00A0-\u269f]',
'[\u26A0-\u329f]',
// The following characters could not be minified correctly
// if specifed with the ES6 syntax \u{1F400}
'[?-?]'
//'[\u{1F004}-\u{1F9C0}]'
];
function removeInvalidChars(text) {
return text.replace(new RegExp(ranges.join('|'), 'ug'), '');
}
Кажется, что это работает хорошо, входящее сообщение, такое как:
??????❤️??????????????? Привет
Результаты:
"Привет!"
Однако, когда я передаю строку «эй, там» в мой languageRegEx, я получаю ложное срабатывание.
const languageRegEx = /[^\x00-\x7F]+/gi;
const badLanguageFound = languageRegEx.test(messageClean);
Когда badLanguageFound возвращает значение true, тогда как на самом деле
Я ясно вижу, что строка в моем отладчике просто "привет", я также пытался проверить наличие скрытых символов / непечатных символов, но, похоже, это не помогает.
Затем я проверил, что вместо удаления смайликов с пробелом, я использовал бы х, чтобы убедиться, что для каждого удаленного смайлика есть символ. При проверке этого в regexr с вставленными возвращенными значениями я заметил, что символ сердца, кажется, поднят:
Я нахожу странным, что когда я просто заменяю на '', он ничего не берет, но когда я заменяю на х, он подсвечивается.
Есть совет? Моя голова колотится, пытаясь разобраться с этим.