How to remove emoji code using javascript?

后端 未结 12 2153
忘了有多久
忘了有多久 2020-11-27 05:04

How do I remove emoji code using JavaScript? I thought I had taken care of it using the code below, but I still have characters like

相关标签:
12条回答
  • <!DOCTYPE html>
    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script>
    function isEmoji(str) {
        var ranges = [       
           '[\uE000-\uF8FF]',
           '\uD83C[\uDC00-\uDFFF]',
           '\uD83D[\uDC00-\uDFFF]',
           '[\u2011-\u26FF]',
           '\uD83E[\uDD10-\uDDFF]'         
        ];
        if (str.match(ranges.join('|'))) {
            return true;
        } else {
            return false;
        }
    }
    $(document).ready(function(){
     $('input').on('input',function(){
        var $th = $(this);
        console.log("Value of Input"+$th.val());
        emojiInput= isEmoji($th.val());
        if (emojiInput==true) {
            $th.val("");
        }
    });
    });
    </script>
    </head>
    <body>
    Enter your name: <input type="text">
    </body>
    </html>
    
    0 讨论(0)
  • 2020-11-27 05:30

    sandre89's answer is good but not perfect. I spent some time on the subject and have a working solution.

    var ranges = [
      '[\u00A0-\u269f]',
      '[\u26A0-\u329f]',
      // The following characters could not be minified correctly
      // if specifed with the ES6 syntax \u{1F400}
      '[                                                                    
    0 讨论(0)
  • 2020-11-27 05:33

    None of the answers here worked for all the unicode characters I tested (specifically characters in the miscellaneous range such as ⛽ or ☯️).

    Here is one that worked for me, (heavily) inspired from this SO PHP answer:

    function _removeEmojis(str) {
      return str.replace(/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?/g, '');
    }
    

    (My use case is sorting in a data grid where emojis can come first in a string but users want the text ordered by the actual words.)

    0 讨论(0)
  • 2020-11-27 05:34
    var emoji =/([#0-9]\u20E3)|[\xA9\xAE\u203C\u2047-\u2049\u2122\u2139\u3030\u303D\u3297\u3299][\uFE00-\uFEFF]?|[\u2190-\u21FF][\uFE00-\uFEFF]?|[\u2300-\u23FF][\uFE00-\uFEFF]?|[\u2460-\u24FF][\uFE00-\uFEFF]?|[\u25A0-\u25FF][\uFE00-\uFEFF]?|[\u2600-\u27BF][\uFE00-\uFEFF]?|[\u2900-\u297F][\uFE00-\uFEFF]?|[\u2B00-\u2BF0][\uFE00-\uFEFF]?|(?:\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDEFF])[\uFE00-\uFEFF]?|[\u20E3]|[\u26A0-\u3000]|\uD83E[\udd00-\uddff]|[\u00A0-\u269F]/g;
    
    str.replace(emoji, "");
    

    i add this '\uD83E[\udd00-\uddff]'

    these emojis were updated when 2018 june

    if u want block emojis after other update then use this

    str.replace(/[^0-9a-zA-Zㄱ-힣+×÷=%♤♡☆♧)(*&^/~#@!-:;,?`_|<>{}¥£€$◇■□●○•°※¤《》¡¿₩\[\]\"\' \\]/g ,"");
    

    u can block all emojis and u can only use eng, num, hangle, and some Characters thx :)

    0 讨论(0)
  • 2020-11-27 05:39

    For me none of the answers completely removed all emojis so I had to do some work myself and this is what i got :

    text.replace(/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g, '');
    

    Also, it should take into account that if one inserting the string later to the database, replacing with empty string could expose security issue. instead replace with the replacement character U+FFFD, see : http://www.unicode.org/reports/tr36/#Deletion_of_Noncharacters

    0 讨论(0)
  • 2020-11-27 05:39

    @bobince's solution didn't work for me. Either the Emojis stayed there or they were swapped by a different Emoji.

    This solution did the trick for me:

    var ranges = [
      '\ud83c[\udf00-\udfff]', // U+1F300 to U+1F3FF
      '\ud83d[\udc00-\ude4f]', // U+1F400 to U+1F64F
      '\ud83d[\ude80-\udeff]' // U+1F680 to U+1F6FF
    ];
    
    
    $('#mybtn').on('click', function() {
      removeInvalidChars();
    })
    
    function removeInvalidChars() {
      var str = $('#myinput').val();
    
      str = str.replace(new RegExp(ranges.join('|'), 'g'), '');
      $("#myinput").val(str);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input type="text" id="myinput"/>
    <input type="submit" id="mybtn" value="clear"/>

    Source

    0 讨论(0)
提交回复
热议问题