输入过滤表情符和特殊字符

900 阅读1分钟

字符正则

表情符正则:

const emojiReg = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/ig;

特殊字符正则:

const scReg = /[`~!@#$%^&*()_-+=<>?:"{}|,./;'\[]·~!@#¥%……&*()——-+={}|《》?:“”【】、;‘',。、]/im;

过滤方式

直接替换

let str = 'aa '
console.log(str.replace(emojiReg, ''));

不匹配时toast提示

if (str.match(emojiReg)) {
  console.log('输入包含非法字符,请检查!')
}

这种方式适用于textarea场景中。对于textarea,bindinput 处理函数并不会将返回值反映到 textarea 上,因此不建议在多行文本上对用户的输入进行修改。

注意:采用match匹配代替test检测,因为每次test时,lastIndex会发生更改,可能第一次结果为true,再一次的结果为false,导致test结果不准确