用JS过滤Emoji表情的输入

本文为原创,转载请注明出处: cnzt       文章:cnzt-phtml

http://www.cnblogs.com/zt-blog/p/6773854.html 前端

 

在前端页面开发过程当中,总会碰到不容许输入框输入emoji表情的需求,个人思路是经过编码用正则匹配表情,而后将其替换为空字符创。可是问题也是显而易见的,完整的编码集是什么呢?查阅了官方文档,发现上面并无给出想要的答案。而且不少emoji表情除了主编码还有副编码(这是我给取的名字),举个例子:测试

  \uD83C\uDC00是一个表情,\uD83C\uDC00\u200D又是一个表情,我把\uD83C\uDC00称为主编码,\u200D称为副编码(或者衍生编码,反正意思理解了就行)。编码

 

--------------------------接下来漫长的手动测试编码集的过程--------------------------spa

 

最终解决方案以下:code

1 var regStr = /[\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;
2 var org_val = $("input").val();
3 
4 if(regStr.test(org_val)){
5   $("#input").val(org_val.replace(regStr,""));
6 }

 

上面的正则能够匹配iOS10.2.1及以前的所有emoji表情,Android的表情由于比较多,如上面的正则有遗漏,可自行补充。测试一个表情的编码方法以下:htm

1 <input type="text" />
2 
3 
4 var org_val = $("input").val();
5 console.log(escape(org_val));
6 //escape获得%uD83C%u.........格式的编码,可对应成\u...格式

 

 

本文完。blog

相关文章
相关标签/搜索