1 前言javascript
因为带emoj表情的昵称没法存储在mysql character_set_server= utf8模式下,按照参考文章[1],改为utf8mb4,无效(可能使用方法不对)。html
整体思路是,把昵称过滤emoj表情,获得过滤后的昵称。java
2 代码node
function filterNicknameWithEmoj(nickname){ 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; var nickname_filter=""; //regStr.test(nickname)会一次成功一次失败,待排查是否和regStr写法有关 if(regStr.test(nickname)){ nickname_filter = nickname.replace(regStr,""); nickname_filter = removeBlank(nickname_filter); return nickname_filter; } return nickname; } function removeBlank(str){ str = str.trim(); var ret = ""; for(var i = 0; i < str.length; i++){ if(str[i] != ' '){ ret+=str[i]; } } return ret; }
正则表达式还有其它表示方法,这个正则表达式能够过滤ios10+所有表情包[2]mysql
3 参考ios
[1] 经过node.js保存emoji到mysql正则表达式
[2] https://www.cnblogs.com/zt-blog/p/6773854.htmlsql
[3] https://segmentfault.com/q/1010000005840528segmentfault
[4] https://segmentfault.com/q/1010000011875872/a-1020000011876055微信