用JS過濾Emoji表情的輸入


本文為原創,轉載請注明出處: cnzt       文章:cnzt-p

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

 

在前端頁面開發過程中,總會碰到不允許輸入框輸入emoji表情的需求,我的思路是通過編碼用正則匹配表情,然后將其替換為空字符創。但是問題也是顯而易見的,完整的編碼集是什么呢?查閱了官方文檔,發現上面並沒有給出想要的答案。並且很多emoji表情除了主編碼還有副編碼(這是我給取的名字),舉個例子:

  \uD83C\uDC00是一個表情,\uD83C\uDC00\u200D又是一個表情,我把\uD83C\uDC00稱為主編碼,\u200D稱為副編碼(或者衍生編碼,反正意思理解了就行)。

 

--------------------------接下來漫長的手動測試編碼集的過程--------------------------

 

最終解決方案如下:

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的表情因為比較多,如上面的正則有遺漏,可自行補充。測試一個表情的編碼方法如下:

1 <input type="text" />
2 
3 
4 var org_val = $("input").val();
5 console.log(escape(org_val));
6 //escape得到%uD83C%u.........格式的編碼,可對應成\u...格式

 

 

本文完。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM