我正在进行单词计数,更具体地说是我的文本编辑器的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 );
}
});
答案 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