用javascript计算字节

时间:2015-03-11 03:39:49

标签: javascript jquery meteor

我正在进行单词计数,更具体地说是我的文本编辑器的btye计数。但是,我正在制作它以便计算韩语(2个字节)。

但是我需要这样做,以便它不计算诸如`#= {}()之类的字符......

我已经走到了这一步,但我不知道如何从这里走得更远。现在它除了我想要它做什么之外什么都做。谢谢!

    var limit_length = 1000;
    var msg_length = 0;
     
    //String bytes() Function
    String.prototype.bytes = function() {
        var msg = this;
        var cnt = 0;
     
        //Korean 2, English 1 count increment
        for( var i=0; i< msg.length; i++) 
            cnt += (msg.charCodeAt(i) > 128 ) ? 2 : 1;  
            return cnt;
        }

        //#submit-content Key up activation
        $("#submit-content").keyup(function( e ){
            msg_length = $.trim($(this).val()).bytes(); //to trim whitespaces 
         
            if( msg_length <= limit_length ) {     
                $("#type_num").css("color", "#474646");    
                $("#type_num").html( msg_length );  
            }
            else {
                $("#type_num").css("color", "#E55451");   
                $("#type_num").html( msg_length );   
            }
    });

2 个答案:

答案 0 :(得分:0)

您可以创建一个字符串,其中包含您不想在计数中匹配的所有字符,并将每个字符与它进行比较:

var exceptString = "#={}()";

//Korean 2, English 1 count increment
    for( var i=0; i< msg.length; i++){
        if( exceptString.indexOf(msg.charAt(i)) == -1 ){ 
            cnt += (msg.charCodeAt(i) > 128 ) ? 2 : 1; 
        }
     }
     return cnt;

答案 1 :(得分:0)

一个非常简短的技巧或解决方法,将此解决方案命名为您想要的方式:

function lengthBytes(str) {
    return unescape(encodeURIComponent(str)).length;
}

// also you can add this solution to the String prototype
String.prototype.lengthBytes = function () {
    return unescape(encodeURIComponent(this)).length;
}

如何运作

unescape(encodeURIComponent("§")).length;

// it will be encodeURIComponent("§") » %C2%A7

// and unescape("%C2%A7") will return 2 converted chars