개인적인 프로그램/자바스크립트

네이버 블로그에 사용돼는 태그 관련 스크립트

삽지리 2011. 10. 26. 13:53

//addec by mj.chong 2006.12.06
//tag 금칙 문자 (%, &, +, <, >, ?, /, \, ', ", =,  \n)
//comma는 별로도 제외하는 로직이 있음
var restrictedTagChars = /[\x25\x26\x2b\x3c\x3e\x3f\x2f\x5c\x27\x22\x3d]|(\x5c\x6e)/g;

 

function validTag(tagObj, e)
{
 var tagVal = tagObj.value;
 var commacnt = 0;
 var key = window.event ? e.keyCode : e.which;
 
 if(tagVal.charAt(tagVal.length-1) == ',' && (key == 44 || key == 32))
  return false;
 for(var i=0; i < tagVal.length; i++) {
  if(tagVal.charAt(i) == ',') {
   commacnt++;
  }
  if(commacnt >= 9) {
   alert("태그는 최대 10개까지 입력할 수 있습니다.");
    return false;
   }
 }
 
 if (key != 0x2C && (key > 32 && key < 48) || (key > 57 && key < 65) || (key > 90 && key < 97))
  return false;
}

 function check_tagvalidate(aEvent, input)
 {
  
  var keynum;
  if(typeof aEvent=="undefined") aEvent=window.event;
  if(IE)
  {
   keynum = aEvent.keyCode;
  }
  else
  {
   keynum = aEvent.which;
  }
  //edited by mj.chong 20061206
  //if(keynum == 188 ) {
  // input.value = BlogTag.validateTagString(input.value);
  //}
  //  %, &, +, -, ., /, <, >, ?, \n, \ |
  var ret = input.value;
  if(ret.match(restrictedTagChars) != null ) {
    ret = ret.replace(restrictedTagChars, "");
    input.value=ret;
  }
  //콤마가 연속으로 있으면 하나로 만든다.
  re = /[\x2c][\x2c]+/g;
  if(ret.match(re) != null ){
   ret = ret.replace(re, ",");
   input.value=ret;
  }
  highlightMyTag();  

 }

 function check_tagsvalidate(input)
 {
  input.value = BlogTag.validateTagString(input.value);

  //중복되는 태그 제거
  input.value = BlogTag.eliminateDuplicate(input.value);

  var tagcount = BlogTag.length(input.value);
  highlightMyTag();
  //태그 수 제한
  if(tagcount > 10)
  {
   alert("태그는 최대 10개 까지 입력이 가능합니다.");
   input.value = BlogTag.absoluteTagString(input.value, 10);   
   input.focus();
   
   return;
  }
  

  //태그의 길이 제한
  var bvalidate;
  var tagmaxlength = 100;
  bvalidate = BlogTag.isValidateTagLength(input.value, tagmaxlength);

  if(!bvalidate)
  {
   alert("태그는  100자 이상 입력할 수 없습니다.");
   input.focus();
   return;
  }
 }

var BlogTag =
{
 //유효한 태그명인지 확인.
 isTagname : function(tagname)
 {
  return tagname.match(restrictedTagChars)==null;
 }
 ,

 //태그 문자열을 유효하게 만든다.( 금지문자 제거, 연속되는 컴마 제거 )
 validateTagString : function(tagstring)
 {
  var ret = tagstring.replace(restrictedTagChars, "");

  //콤마가 연속으로 있으면 하나로 만든다.
  re = /[\x2c]+/g;
  return ret.replace(re, ",");
 }
 ,
 
 absoluteTagString : function(tagstring, maxcnt)
 {
  var valitags = BlogTag.validateTagString(tagstring);
 
  var arraytag = valitags.split(",");
  
  var tagnames = "";

  var absolutecnt = arraytag.length;
  if(absolutecnt > maxcnt)
   absolutecnt = maxcnt;
   
  for(var i=0; i< absolutecnt; i++)
  {
   tagnames = tagnames + arraytag[i] + ",";
  }
  tagnames = BlogTag.validateTagString(tagnames);
  
  tagnames = tagnames.substring(0, tagnames.length-1);

  return tagnames; 
 }
 ,

 //중복되는 태그를 없앤다.
 eliminateDuplicate : function(tagstring)
 {
  var valitags = BlogTag.validateTagString(tagstring);
 
  var arraytag = valitags.split(",");
  
  var tagnames = "";
  
  for(var i=0; i<arraytag.length; i++)
  {
   for(var j=0; j<i; j++)
   {
    //이미 존재 하는 태그라면 없앰.
    if(arraytag[j]==arraytag[i])
    {
     arraytag[i]="";
    }
   }

   tagnames = tagnames + arraytag[i] + ",";
   
  }
  tagnames = BlogTag.validateTagString(tagnames);
  
  tagnames = tagnames.substring(0, tagnames.length-1);

  return tagnames;

 }
 ,

 //태그수 를 계산 한다.
 length : function(tagstring)
 {
  var arraytag = tagstring.split(",");
 
  return arraytag.length;
 }
 ,

 //각 태그의 길이를 특정 크기 이하로 제한한다.
 validateTagLength : function(tagstring, maxlen)
 {
  var arraytag = tagstring.split(",");
  var tagnames = '';

  for(var i=0; i<arraytag.length; i++)
  {
   if(arraytag[i].length > maxlen)
   {
    arraytag[i] = arraytag[i].substring(0, maxlen);
   }
   tagnames = tagnames + arraytag[i] + ",";
  }

  tagnames = tagnames.substring(0, tagnames.length-1);

  tagnames = BlogTag.eliminateDuplicate(tagnames);

  return tagnames;
 }
 ,

 //각 태그의 길이가 유효한지 확인한다.
 isValidateTagLength : function(tagstring, maxlen)
 {
  var arraytag = tagstring.split(",");

  for(var i=0; i<arraytag.length; i++)
  {
   if(arraytag[i].length > maxlen)
   {
    return false;
   }
  }

  return true;
 }
}