Js 過濾emoji表情...持續補充中..


原文來自:

https://www.cnblogs.com/tsjTSJ/p/7065544.html

最全最詳細的用JS過濾Emoji表情的輸入

 

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

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

 

最終解決方案如下:

 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 org_val = $("input").val();

 if(regStr.test(org_val)){
   $("#input").val(org_val.replace(regStr,""));
 }
上面的正則可以匹配iOS10.2.1及之前的全部emoji表情,Android的表情因為比較多,如上面的正則有遺漏,可自行補充。測試一個表情的編碼方法如下:
<input type="text" />
 
 
 var org_val = $("input").val();
console.log(escape(org_val));
//escape得到%uD83C%u.........格式的編碼,可對應成\u...格式

擴展閱讀:
1、escape 與encodeURI 的區別 ;

Differences between encodeURI, encodeURIComponent, and escape:Unicode characters

 Contents | JavaScript FAQ | Strings & RegExp FAQ | URL-encoding    

As a simple example of Unicode (non-ASCII) characters, the table below shows the URL encodings for part of the Cyrillic subset of the Unicode character set (\u0410 thru \u042F). Note that the same Unicode character may produce the encoding %uXXXX if you use escape and the encoding %XX%XXif you use encodeURI or encodeURIComponent.

Importantly, the functions escapeencodeURI, and encodeURIComponent work like that for other parts of the Unicode character set as well: only the escapefunction may return the encoding of the form %uXXXX. (See also ASCII andupper ASCII characters.)

chr    escape(chr)   encodeURI(chr)  encodeURIComponent(chr)
 А	 %u0410	        %D0%90	        %D0%90
 Б	 %u0411	        %D0%91	        %D0%91
 В	 %u0412	        %D0%92	        %D0%92
 Г	 %u0413	        %D0%93	        %D0%93
 Д	 %u0414	        %D0%94	        %D0%94
 Е	 %u0415	        %D0%95	        %D0%95
 Ж	 %u0416	        %D0%96	        %D0%96
 З	 %u0417	        %D0%97	        %D0%97
 И	 %u0418	        %D0%98	        %D0%98
 Й	 %u0419	        %D0%99	        %D0%99
 К	 %u041A	        %D0%9A	        %D0%9A
 Л	 %u041B	        %D0%9B	        %D0%9B
 М	 %u041C	        %D0%9C	        %D0%9C
 Н	 %u041D	        %D0%9D	        %D0%9D
 О	 %u041E	        %D0%9E	        %D0%9E
 П	 %u041F	        %D0%9F	        %D0%9F
 Р	 %u0420	        %D0%A0	        %D0%A0
 С	 %u0421	        %D0%A1	        %D0%A1
 Т	 %u0422	        %D0%A2	        %D0%A2
 У	 %u0423	        %D0%A3	        %D0%A3
 Ф	 %u0424	        %D0%A4	        %D0%A4
 Х	 %u0425	        %D0%A5	        %D0%A5
 Ц	 %u0426	        %D0%A6	        %D0%A6
 Ч	 %u0427	        %D0%A7	        %D0%A7
 Ш	 %u0428	        %D0%A8	        %D0%A8
 Щ	 %u0429	        %D0%A9	        %D0%A9
 Ъ	 %u042A	        %D0%AA	        %D0%AA
 Ы	 %u042B	        %D0%AB	        %D0%AB
 Ь	 %u042C	        %D0%AC	        %D0%AC
 Э	 %u042D	        %D0%AD	        %D0%AD
 Ю	 %u042E	        %D0%AE	        %D0%AE
 Я	 %u042F	        %D0%AF	        %D0%AF

Note also that for many Unicode characters, encodeURI or encodeURIComponentreturn the encoding %XX%XX%XX rather than %XX%XX, for example:

chr    escape(chr)   encodeURI(chr)  encodeURIComponent(chr)
 ≠	 %u2260	      %E2%89%A0	      %E2%89%A0
 ≡	 %u2261	      %E2%89%A1	      %E2%89%A1
 ≢	 %u2262	      %E2%89%A2	      %E2%89%A2
 ≣	 %u2263	      %E2%89%A3	      %E2%89%A3
 ≤	 %u2264	      %E2%89%A4	      %E2%89%A4
 ≥	 %u2265	      %E2%89%A5	      %E2%89%A5
(See Mathematical and Special Symbols for more examples.)

簡單的來說就是 一個Unicode 編碼的兩種格式
來自:http://www.javascripter.net/faq/escape-encodeuri-unicode.htm

二、其他方式:
def filter_emoji(desstr,restr=''):   
    '''''     過濾表情     '''     
   try:         
    co = re.compile(u'[\U00010000-\U0010ffff]')     
   except re.error:         
    co = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')      ###一般emoji表情還有副字符,這里只匹配到了2個字符

   return co.sub(restr, desstr)
三。這里提供一個鏈接,fb,twitter的emoji合集:
https://emojipedia.org/facebook/





免責聲明!

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



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