본문 바로가기

DeveloP/Java-Script

textarea 자동 글자수 체크 함수

밑에 함수는 글자수를 체크하여 자동으로 몇바이트까지 입력을 체크하면서 돈다.


<script language="JavaScript">
//textarea 자동 글자수 첵크 함수
<!--

function updateChar(length_limit)
{
   var form = document.frm;
   var length = calculate_msglen(frm.comment.value);
   textlimit.innerText = length;
   if (length > length_limit) {
       alert("최대 " + length_limit + "byte이므로 초과된 글자수는 자동으로 삭제됩니다.");
       frm.comment.value = frm.comment.value.replace(/\r\n$/, "");
       frm.comment.value = assert_msglen(frm.comment.value, length_limit);
   }
}

function calculate_msglen(message)
{
   var nbytes = 0;

   for (i=0; i<message.length; i++) {
       var ch = message.charAt(i);
       if(escape(ch).length > 4) {
           nbytes += 2;
       } else if (ch == '\n') {
           if (message.charAt(i-1) != '\r') {
               nbytes += 1;
           }
       } else if (ch == '<' || ch == '>') {
           nbytes += 4;
       } else {
           nbytes += 1;
       }
   }

   return nbytes;
}

function assert_msglen(message, maximum)
{
   var inc = 0;
   var nbytes = 0;
   var msg = "";
   var msglen = message.length;

   for (i=0; i<msglen; i++) {
       var ch = message.charAt(i);
       if (escape(ch).length > 4) {
           inc = 2;
       } else if (ch == '\n') {
           if (message.charAt(i-1) != '\r') {
               inc = 1;
           }
       } else if (ch == '<' || ch == '>') {
           inc = 4;
       } else {
           inc = 1;
       }
       if ((nbytes + inc) > maximum) {
           break;
       }
       nbytes += inc;
       msg += ch;
   }
   textlimit.innerText = nbytes;
   return msg;
}
//-->

<textarea name="comment" id="comment" cols="80" rows="4" class="textarea1" onkeyup="updateChar(250);"></textarea>