티스토리 뷰

   var ch = escape(str.charAt(i));
   
   if (ch.length == 1) bytes++;
   else if (ch.indexOf("%u") != -1) bytes += 2;
   else if (ch.indexOf("%") != -1) bytes += ch.length / 3;

부분이 핵심 부분입니다.

 

 function getByteLength(str) {
  var len = 0;
  var max = str.length;
  
  for (var i = 0; i < max; i++) {
   var ch = escape(str.charAt(i));
   
   if (ch.length == 1) len++;
   else if (ch.indexOf("%u") != -1) len += 2;
   else if (ch.indexOf("%") != -1) len += ch.length / 3;
  }
  
  return len;
 }
 
 function setCutStr(str, limit_len) {
  var max = str.length;
  var bytes = 0;
  for (var i = 0; i < max; i++) {
   var ch = escape(str.charAt(i));
   
   if (ch.length == 1) bytes++;
   else if (ch.indexOf("%u") != -1) bytes += 2;
   else if (ch.indexOf("%") != -1) bytes += ch.length / 3;
   
   if (bytes > limit_len) {
    return str.substring(0, i);
   }
  }
  
  return str;
 }

 

jQuery('#textarea').on('keyup', function() {
   var strlen = getByteLength(this.value);
   if (strlen > 500) {
    alert('500byte 까지 입력가능합니다.');
    var result = setCutStr(this.value, 500);
    jQuery('#textarea'').val(result);
    
    strlen = getByteLength(result);
    jQuery('#textLength').html(strlen);
   } else {
    var strlen = getByteLength(this.value);
    jQuery('#textLength').html(strlen);
   }
  });

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함