我希望在聊天应用程序中检测非英语键盘字符。
现在我使用以下正则表达式识别语言,例如俄语和普通话。
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'), '');
}
看起来这很好用,一个入站消息,如:
❤️嘿那里
结果:
"嘿那里"
然而,当我传递字符串"嘿那里"进入我的语言ReExEx我收到了误报。
const languageRegEx = /[^\x00-\x7F]+/gi;
const badLanguageFound = languageRegEx.test(messageClean);
当badLanguageFound返回true时,实际上是
我可以清楚地看到我的调试中的字符串是简单的"嘿那里"我也试图检查隐藏的字符/不可打印的字符,但它似乎没有帮助。
然后我继续检查,而不是删除带有空白的表情符号,我会使用x来确保删除每个表情符号都有一个字符。当使用粘贴的返回值在regexr中检查时,我注意到心脏符号似乎被拾取: 我觉得奇怪的是,当我用'''它没有拾取任何东西,但当我用x替换时它突出显示。
有什么建议吗?我的脑袋正在努力解决这个问题。