Javascript&非英语字符检测的正则表达式,同时忽略表情符号

时间:2018-05-11 10:54:11

标签: javascript regex emoji

我希望在聊天应用程序中检测非英语键盘字符。

现在我使用以下正则表达式识别语言,例如俄语和普通话。

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中检查时,我注意到心脏符号似乎被拾取: Emoji replacement 我觉得奇怪的是,当我用'''它没有拾取任何东西,但当我用x替换时它突出显示。

有什么建议吗?我的脑袋正在努力解决这个问题。

0 个答案:

没有答案