'자바스크립트'에 해당되는 글 15

  1. 2007.10.26 [Javascript] 스트링 형의 사용자 정의 유용한 메서드

//===================================================================
// StringUtil
//===================================================================
// nvl(value, replacer)
// replace( target, replacee)
// replace( target, replacee, replacer)
// containsCharsOnly(input,chars) {
// delChar(newValue, ch)
// isEmpty(a)
// isNull(a)
// lpad(newValue, len)
// lpad(newValue, len, ch)
// ltrim(a)
// rpad(newValue, len)
// rpad(newValue, len, ch)
// rtrim(a)
// trim(a)
// checkjumin(serial1,serial2)
//===================================================================


/////////////////////////////////////////////////////
function  replace( target, replacee){
/////////////////////////////////////////////////////
// String 의 문자열을 공백문자열로 치완한다.
 return replace( target, replacee, " ");
}

/////////////////////////////////////////////////////
function  replace( target, replacee, replacer){
/////////////////////////////////////////////////////
// String 의 문자열을 다른 문자열로 치완한다.
 var ret = "";
 retStr = "" + target;
 
 while (retStr.indexOf(replacee)>-1) {
  pos= retStr.indexOf(replacee);
  retStr = "" + (retStr.substring(0, pos) + replacer + retStr.substring((pos + replacee.length), retStr.length));
 }
 return retStr;
}

//////////////////////////////////////////
function rpad(newValue, len, ch){
//////////////////////////////////////////
//  오른쪽에 ch문자로 채우기
 var strlen = trim(newValue).length;
 var ret = "";
 var alen = len - strlen;
 var astr = "";
 
 //부족한 숫자만큼  len 크기로 ch 문자로 채우기
 for (i=0; i<alen; ++i)
 {
  astr = astr + ch;
 }
 
 ret = trim(newValue) + astr; //뒤에서 채우기
 return ret;
}

//////////////////////////////////////////
function rpad(newValue, len){
//////////////////////////////////////////
//  오른쪽에 공백문자로 채우기
 return rpad(newValue, len, " " );
}

//////////////////////////////////////////
function lpad(newValue, len, ch){
//////////////////////////////////////////
// 왼쪽에 ch 문자 채우기
 var strlen = trim(newValue).length;
 var ret = "";
 var alen = len - strlen;
 var astr = "";
 
 //부족한 숫자만큼  len 크기로 ch 문자로 채우기
 for (i=0; i<alen; ++i)
 {
  astr = astr + ch;
 }
 
 ret = astr + trim(newValue); //앞에서 채우기
 return ret;
}

//////////////////////////////////////////
function lpad(newValue, len){
//////////////////////////////////////////
//  왼쪽에 공백문자로 채우기
 return lpad(newValue, len, " " );
}

//////////////////////////////////////////
function nvl(value, replacer){
//////////////////////////////////////////
// null 일 경우, 값 대체
 if ( value == null){
  return replacer;
 }else{
  return value;
 }
}


///////////////////////////////////////////
function trim(a) {
///////////////////////////////////////////
    return(ltrim(rtrim(a)));
}

///////////////////////////////////////////
function ltrim(a) {
///////////////////////////////////////////
 var i;
 i = 0;
 while (a.substring(i,i+1) == ' ' || a.substring(i,i+1) == ' ')  i = i + 1;
 return a.substring(i);
}


///////////////////////////////////////////
function rtrim(a){
///////////////////////////////////////////
 var b;
 var i = a.length - 1;
 while (i >= 0 && (a.substring(i,i+1) == ' ' || a.substring(i,i+1) == ' ')) i = i - 1;
 return a.substring(0,i+1);
}

///////////////////////////////////////////
function isEmpty(a){
///////////////////////////////////////////
 // null 이거나 null String 일때.
 if (a == null || trim(a) == '' ) return true;
 return false;
}

///////////////////////////////////////////
function isNull(a){
///////////////////////////////////////////
 return isEmpty(a);
}

/////////////////////////////////////
function delChar(newValue, ch){
/////////////////////////////////////
// StrUtil.js에서 사용하는 공통 함수
 var len = newValue.length;
 var ret = "";
 
 //문자열에서 ch 문자를 제거한다. 예) ,  - 등등
 for (i=0; i<len; ++i)
 {
  if (newValue.substring(i,i+1) != ch)
   ret = ret + newValue.substring(i,i+1);
 }
 
 return ret;
}

//////////////////////////////////////////////////
function containsCharsOnly(input,chars) {
//////////////////////////////////////////////////
// chars로 넘겨진 문자열로만 입략 값이 구성되었는지 여부.
    for (var inx = 0; inx < input.length; inx++) {
       if (chars.indexOf(input.charAt(inx)) == -1)
           return false;
    }
    return true;
}  


/////////////////////////////////////////////////////
/// 영문자, 숫자로만 구성되어있는지 체크하는 함수 ///
/////////////////////////////////////////////////////
function  isAlphaNumeric(str) {
/////////////////////////////////////////////////////
 var re = /[a-zA-Z0-9-]/;
 for (var i = 0; i < str.length; i++) {
  if (!re.test(str.charAt(i))) {
   return false;
  }
 }
 return true;
}


//////////////////////////////////////////////////////////
/// 영문 소문자, 숫자로만 구성되어있는지 체크하는 함수 ///
//////////////////////////////////////////////////////////
function  isSmallAlphaNumeric(str) {
//////////////////////////////////////////////////////////
 var re = /[a-z0-9]/;
 for (var i = 0; i < str.length; i++) {
  if (!re.test(str.charAt(i))) {
   return false;
  }
 }
 return true;
}


///////////////////////////////////////////
function checkjumin(serial1,serial2){
///////////////////////////////////////////
// 주민번호
 if (serial1.length != 6){
  return false;
 } else if ( serial2.length != 7){
     return false;
   } else {

  var str_serial1 = serial1;
  var str_serial2 = serial2;
  var digit=0;
 
  for (var i=0;i<str_serial1.length;i++){
   var str_dig=str_serial1.substring(i,i+1);
   if (str_dig<'0' || str_dig>'9'){
    digit=digit+1 ;
   }
  }

  if ((str_serial1 == '') || ( digit != 0 )){
   return false;  
  }
 
  var digit1=0
  for (var i=0;i<str_serial2.length;i++){
   var str_dig1=str_serial2.substring(i,i+1);
   if (str_dig1<'0' || str_dig1>'9'){
    digit1=digit1+1;
   }
  }

  if ((str_serial2 == '') || ( digit1 != 0 )){
   return false;  
  }


  if (str_serial1.substring(2,3) > 1){
   return false;  
  }

  if (str_serial1.substring(4,5) > 3){
   return false;  
  }

  if (str_serial2.substring(0,1) > 4 || str_serial2.substring(0,1) == 0){
   return false;  
  }

  var a1=str_serial1.substring(0,1);
  var a2=str_serial1.substring(1,2);
  var a3=str_serial1.substring(2,3);
  var a4=str_serial1.substring(3,4);
  var a5=str_serial1.substring(4,5);
  var a6=str_serial1.substring(5,6);
 
  var check_digit=a1*2+a2*3+a3*4+a4*5+a5*6+a6*7;
 
  var b1=str_serial2.substring(0,1);
  var b2=str_serial2.substring(1,2);
  var b3=str_serial2.substring(2,3);
  var b4=str_serial2.substring(3,4);
  var b5=str_serial2.substring(4,5);
  var b6=str_serial2.substring(5,6);
  var b7=str_serial2.substring(6,7);
 
  var check_digit=check_digit+b1*8+b2*9+b3*2+b4*3+b5*4+b6*5 ;
 
  check_digit = check_digit%11;
  check_digit = 11 - check_digit;
  check_digit = check_digit%10;

  if (check_digit != b7){
   return false;  
  } else {
   return true;
  }
 }

 /** =============================================
 Comment: 입력값(str)의 길이를 반환해주는 함수 16진수로 변환하여 계산
 Return : string
 Usage  : getByteLength(str) => 문자열의 길이를 반환
 --------------------------------------------- **/
 function getByteLength(str) {
  var byteLength= 0;
  for(var inx=0; inx < str.length; inx++) {
   var oneChar = escape(str.charAt(inx));
   if( oneChar.length == 1 )
    byteLength ++;
   else if(oneChar.indexOf("%u") != -1)
    byteLength += 2;
   else if(oneChar.indexOf("%") != -1)
    byteLength += oneChar.length/3;
  }
  return byteLength;
 }
}

/** =============================================
Comment: 사업자등록번호 체크
Return : Boolean
Usage  : checkCompNmbr(formName)
--------------------------------------------- **/
function checkCompNmbr(formName, label){
 var str = formName.value;
 
 while (str.indexOf('-')!=-1){
  str = str.replace("-","");
 }

 if(isNaN(str)) {
  window.alert(label+"은(는) 숫자로만 작성하셔야 합니다");
  formName.value="";
  formName.focus();
  return false;
 }

 if (str.length != 10) {
  alert(label + "의 자릿수가 올바르지 않습니다.");
  formName.focus();
  return false;
    }
        
 sumMod = 0;
 sumMod += parseInt(str.substring(0,1));
 sumMod += parseInt(str.substring(1,2)) * 3 % 10;
 sumMod += parseInt(str.substring(2,3)) * 7 % 10;
 sumMod += parseInt(str.substring(3,4)) * 1 % 10;
 sumMod += parseInt(str.substring(4,5)) * 3 % 10;
 sumMod += parseInt(str.substring(5,6)) * 7 % 10;
 sumMod += parseInt(str.substring(6,7)) * 1 % 10;
 sumMod += parseInt(str.substring(7,8)) * 3 % 10;
 sumMod += Math.floor(parseInt(str.substring(8,9)) * 5 / 10);
 sumMod += parseInt(str.substring(8,9)) * 5 % 10;
 sumMod += parseInt(str.substring(9,10));
 
 if (sumMod % 10 != 0)
 {
  alert(str + "은(는) 올바른 " + label + "가 아닙니다");
  formName.focus();
  return false;
 }
 return true;
}


/** =============================================
Comment: 사업자등록번호 체크
Return : Boolean
Usage  : checkCompNmbr(formName)
--------------------------------------------- **/
function checkCompNmbr(formName, label){
 var str = formName.value;
 
 while (str.indexOf('-')!=-1){
  str = str.replace("-","");
 }

 if(isNaN(str)) {
  window.alert(label+"은(는) 숫자로만 작성하셔야 합니다");
  formName.value="";
  formName.focus();
  return false;
 }

 if (str.length != 10) {
  alert(label + "의 자릿수가 올바르지 않습니다.");
  formName.focus();
  return false;
    }
        
 sumMod = 0;
 sumMod += parseInt(str.substring(0,1));
 sumMod += parseInt(str.substring(1,2)) * 3 % 10;
 sumMod += parseInt(str.substring(2,3)) * 7 % 10;
 sumMod += parseInt(str.substring(3,4)) * 1 % 10;
 sumMod += parseInt(str.substring(4,5)) * 3 % 10;
 sumMod += parseInt(str.substring(5,6)) * 7 % 10;
 sumMod += parseInt(str.substring(6,7)) * 1 % 10;
 sumMod += parseInt(str.substring(7,8)) * 3 % 10;
 sumMod += Math.floor(parseInt(str.substring(8,9)) * 5 / 10);
 sumMod += parseInt(str.substring(8,9)) * 5 % 10;
 sumMod += parseInt(str.substring(9,10));
 
 if (sumMod % 10 != 0)
 {
  alert(str + "은(는) 올바른 " + label + "가 아닙니다");
  formName.focus();
  return false;
 }
 return true;
}

/** =============================================
Comment: 사업자등록번호 체크 object가 3개인 경우
Return : Boolean
Usage  : checkCompNmbr(formName)
--------------------------------------------- **/
function chkCompNmbr(formName1,formName2,formName3, label){

 var str1 = formName1.value;
 var str2 = formName2.value;
 var str3 = formName3.value;
 
 while (str1.indexOf('-')!=-1){
  str1 = str1.replace("-","");
 }
 while (str2.indexOf('-')!=-1){
  str2 = str2.replace("-","");
 }
 while (str3.indexOf('-')!=-1){
  str3 = str3.replace("-","");
 }

 if(isNaN(str1)) {
  window.alert(label+"은(는) 숫자로만 작성하세요.");
  formName1.value="";
  formName1.focus();
  return false;
 }
 if(isNaN(str2)) {
  window.alert(label+"은(는) 숫자로만 작성하세요.");
  formName2.value="";
  formName2.focus();
  return false;
 }
 if(isNaN(str3)) {
  window.alert(label+"은(는) 숫자로만 작성하세요.");
  formName3.value="";
  formName3.focus();
  return false;
 }

 if (str1.length != 3) {
  alert(label + "의 자릿수가 올바르지 않습니다.");
  formName1.focus();
  return false;
    }
 if (str2.length != 2) {
  alert(label + "의 자릿수가 올바르지 않습니다.");
  formName2.focus();
  return false;
    }
 if (str3.length != 5) {
  alert(label + "의 자릿수가 올바르지 않습니다.");
  formName3.focus();
  return false;
    }
        
 var str = str1 + str2 + str3;
 sumMod = 0;
 sumMod += parseInt(str.substring(0,1));
 sumMod += parseInt(str.substring(1,2)) * 3 % 10;
 sumMod += parseInt(str.substring(2,3)) * 7 % 10;
 sumMod += parseInt(str.substring(3,4)) * 1 % 10;
 sumMod += parseInt(str.substring(4,5)) * 3 % 10;
 sumMod += parseInt(str.substring(5,6)) * 7 % 10;
 sumMod += parseInt(str.substring(6,7)) * 1 % 10;
 sumMod += parseInt(str.substring(7,8)) * 3 % 10;
 sumMod += Math.floor(parseInt(str.substring(8,9)) * 5 / 10);
 sumMod += parseInt(str.substring(8,9)) * 5 % 10;
 sumMod += parseInt(str.substring(9,10));
 
 if (sumMod % 10 != 0)
 {
  alert(str + "은(는) 올바른 " + label + "가 아닙니다");
  formName1.focus();
  return false;
 }
 return true;
}


/** =============================================
Comment: 사업자등록번호를 "-"를 추가하여 출력형식으로 변환
Return : String
Usage  : transCompNmbrView(formName, label)
--------------------------------------------- **/
function transCompNmbrView(formName, label)
{
 var str = formName.value;
 while (str.indexOf('-')!=-1){
  str = str.replace("-","");
 }
 
 if (!checkCompNmbr(formName, label)){
  return false;

 } else {
  formName.maxlength = "12";

  formName.value = str.substr(0,3) + "-" + str.substr(3,2) + "-" + str.substring(5);
  return true;
 }
}
/** =============================================
Comment: CELL CODE를 "-"를 추가하여 출력형식으로 변환
Return : String
Usage  : transCodeNmbrView(formName, label)
--------------------------------------------- **/
function transCodeNmbrView(formName, label)
{
 var str = formName.value;
 alert(str);
 while (str.indexOf('-')!=-1){
  str = str.replace("-","");
 }
 
 if (!checkCompNmbr(formName, label)){
  return false;

 } else {
  formName.maxlength = "12";

  formName.value = str.substr(0,1) + "-" + str.substr(1,3) + "-" + str.substring(3,4) + "-" + str.substring(4,6) + "-" + str.substring(6,8);
  return true;
 }
}
/** =============================================
Comment: 입력값(email)이 필수항목이 아닌경우 입력되었을때 email형식여부를 check후 올바르면 true
Return : boolean
Usage  : checkEmailSel(aaa.value)
--------------------------------------------- **/
function checkEmailSel(email) {
 if(email.value !="") {
  if(!isValidEmail(email.value)){
   alert("E-Mail 을 다시 한번 확인하시고 입력해 주세요.");
   email.value="";
   email.focus();
   return false;
  }
  return true;
 }
 return true;
}
/** =============================================
Comment: 입력값(str)이 isValidFormat함수의 return값을 return;
Return : boolean
Usage  : if (isValidEmail(abc.value) == true ) return false;
--------------------------------------------- **/
function isValidEmail(str) {
 var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;
 return isValidFormat(str, format);
}

/** =============================================
Comment: 입력값(str)이 null이 아니고 format이 존재하면 true
Return : boolean
Usage  : if (isValidFormat(abc.value, 'ab') == true ) return false;
--------------------------------------------- **/
function isValidFormat(str, format) {
 return ( !isEmpty(str) && (str.search(format) != -1) ? true : false);
}



// 전화번호가 입력폼에 올바르게 입력되었는지 검사한다.
// 매개변수 : 전화번호이름(ex. 대표, 팩스), 지역번호, 국번, 번호
//
// 동작
// 1. 입력된 input의 공백을 제거한다.
// 2. 입력이 비어있거나 길이가 짧거나, 숫자가 아닌경우 메시지를 출력하고 false를 리턴한다.
// 3. 모두 통과하면 true를 리턴한다.
function checkTelephoneNumber(name, tel1, tel2, tel3) {

 tel1.value = tel1.value.replace(/ /gi,"");
 tel2.value = tel2.value.replace(/ /gi,"");
 tel3.value = tel3.value.replace(/ /gi,"");

 if (tel1.value == "") {
  alert(name + "번호를 입력해 주세요.");
  tel1.focus();
  return false;
 }
 else if (tel1.value.length < 2 || isNaN(tel1.value)) {
  alert(name + "번호를 다시 한번 확인하시고 입력해 주세요.");
  tel1.focus();
  return false;
 }

 if (tel2.value == "") {
  alert(name + "번호를 입력해 주세요.");
  tel2.focus();
  return false;
 }
 else if (tel2.value.length < 3 || isNaN(tel2.value)) {
  alert(name + "번호를 다시 한번 확인하시고 입력해 주세요.");
  tel2.focus();
  return false;
 }

 if (tel3.value == "") {
  alert(name + "번호를 입력해 주세요.");
  tel3.focus();
  return false;
 }
 else if (tel3.value.length < 3 || isNaN(tel3.value)) {
  alert(name + "번호를 다시 한번 확인하시고 입력해 주세요.");
  tel3.focus();
  return false;
 }

 return true;
}


// 전화번호가 입력폼에 올바르게 입력되었는지 검사한다.
// 매개변수 : 전화번호이름(ex. 대표, 팩스), 전화번호(숫자만)
//
// 동작
// 1. 입력된 input의 공백을 제거한다.
// 2. 입력이 비어있거나 길이가 짧거나, 숫자가 아닌경우 메시지를 출력하고 false를 리턴한다.
// 3. 모두 통과하면 true를 리턴한다.
function checkTelephoneNumber(name, tel1) {
 var temp
 temp = tel1.value;
 temp = tel1.value.replace(/ /gi,"");
 temp = replace(tel1.value,"-","");

 if (temp == "") {
  alert(name + "번호를 입력해 주세요.");
  tel1.focus();
  return false;
 }
 else if (temp.length < 8 || isNaN(temp)) {
  alert(name + "번호를 다시 한번 확인하시고 입력해 주세요.");
  tel1.focus();
  return false;
 }

 return true;
}


//자동넘기기 시작
//스크립트 호출 onKeyUp="return autoTab(this, 6, event);"
var isNN = (navigator.appName.indexOf("Netscape")!=-1);

function autoTab(input,len, e) {
        var keyCode = (isNN) ? e.which : e.keyCode;
        var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
        if(input.value.length >= len && !containsElement(filter,keyCode)) {
        input.value = input.value.slice(0, len);
        input.form[(getIndex(input)+1) % input.form.length].focus();
}

function containsElement(arr, ele) {
        var found = false, index = 0;
        while(!found && index < arr.length)
        if(arr[index] == ele)
        found = true;
        else
        index++;
        return found;
}

function getIndex(input) {
        var index = -1, i = 0, found = false;
        while (i < input.form.length && index == -1)
        if (input.form[i] == input)index = i;
        else i++;
        return index;
        }
return true;
}
// 자동넘기기 end

//-------------------------------------------
//텍스트의 글자 수를 넘겨준다.
// ex) object : text Area의 오브젝트
//     counterObject : 현재글 카운터가 쓰여질 오브젝트
//     maxChars : 최대 허영 글수
//-------------------------------------------
function textCounter(object,counterObject,maxChars)
{

        var temp = "";
        var charCounter = 0;

        for (var i = 0; i < object.value.length; i++)
        {
                var strChar = object.value.substring(i, i + 1);
                if (strChar == '\n')
                {
                        temp += strChar;
                        charCounter = 1;
                        charCounter += 1;
                }
                else
                {
                        temp += strChar;
                        charCounter ++;
                }
        }
  var tempChr = eval(maxChars) - temp.length;

  if (eval(tempChr) > 0){  
   counterObject.style.color="black";
   counterObject.value = tempChr+"/"+maxChars;
  }else{
   counterObject.style.color="red";
   counterObject.value = tempChr+"/"+maxChars;
  }
}


//---------------------------------------------------------------------
// 길이를 업데이트하고 최대길이가 넘으면 입력할 수 없도록 한다.
// (최대길이 만큼으로 텍스트를 줄인다.)
// 최대길이-1을 하는 이유는 엔터키가 2글자로 인식되서 중간에 잘리는
// 에러를 방지하기 위함.
//---------------------------------------------------------------------
// 호출예 : onpropertychange =
// "javascript:updateLength(document.form.txt_len, document.form.msg_cntn, 400);"
// 마우스로 붙여넣기 하는 경우 등을 고려해서 onpropertychange를 사용.
//---------------------------------------------------------------------
// counter  : 텍스트의 길이 출력부분 ex) document.form.txt_len
// msgObj : 메시지 입력부분 ex) document.form.msg_cntn
// maxlen  : 최대길이 ex) 400
//---------------------------------------------------------------------
function updateLength(counter, msgObj, maxlen) {
 counter.value = msgObj.value.length;
 if (msgObj.value.length > maxlen) {  // 최대글자수를 초과하면
  alert(maxlen + "자 이상 입력하셨습니다.");
  var tmpstr = msgObj.value;
  tmpstr = tmpstr.substring(0, maxlen) // 최대글자수로 잘라낸다.
 
 

  if (tmpstr.substring(maxlen-1, maxlen) == '\r')  // 마지막 문자가 '\r'이면 (엔터키 앞문자이면)
   tmpstr = tmpstr.substr(0, maxlen-1);   // 지운다.
 
  msgObj.value = tmpstr;
  return;
 }

 counter.value = msgObj.value.length;
}


//스크랩 하기.
function __scrap(){
 var popup ;
 document.form.__scrap_url.value=location.href;
 popup = window.open("/jsp/inc/scrap.jsp", 'linkWindow', 'width=600, height=730, toolbar=no, location=no, directories=no, status=no, menubar=no,scrollbars=no,resizable=0,left=200,top=100');
 popup.focus();
}
//스크랩 로그인하기.
function __scrap_login(){
 alert("로그인 하시고 사용하세요.");
 document.form.log_id.focus();
 return;
}





=======================================================================================


<출처 : http://blog.naver.com/latemorning/100007167517 >