/******************************************************** 파일명 : lib.mask.js 설 명 : 브라우져 공통포멧 처리관련 공통함수 모음 화면단 Validation/Filter/Format(won, date, filter외)기능을 처리한다. 사용되는 Mask 패턴 won : 원화 (3자리 마다 "," 입력) year : 년도 (9999) yearmonth : 년월 (9999-99) date : 년월일 (9999-99-99) time : 시간 (99:99) jumin : 주민등록번호 (999999-9999999) bizno : 사업자등록번호 (999-99-99999) corpno : 기업번호 (999999-9999999) orgno : 기관번호 (99-999999) zipcode : 우편번호 (999-999) kor : 한글만 입력가능 eng : 영문만 입력가능 num : 숫자만 입력가능(단 소수점 입력가능, 오른쪽 정렬) num2 : 숫자만 입력가능(소수점 및 공백입력 불가, 왼쪽 정렬) numcode : 숫자만 입력가능 (소수점 및 공백입력 불가) engcode : 영문과 숫자 입력 (공백입력불가) koreng : 한글과 영문입력 (숫자입력불가) kornum : 한글과 숫자입력 (영문입력불가) engnum : 영문과 숫자입력 email : 이메일 포멧 url : URL 포멧 tel : 전화번호 포멧 lowerengnum : 영문(소문자)과 숫자입력 spchar : 특수문자입력 제외 한글, 영문, 숫자만 입력가능 사용방법 //제일 마지막에 Mask Format("won")을 입력한다. 작성자 : 김현배 작성일 : 2008.08.18 수정일 : 2008.08.18 *********************************************************/ var TYPE_NONE = 0; var TYPE_WON = 1; var TYPE_YEAR = 2; var TYPE_YEARMONTH = 3; var TYPE_DATE = 4; var TYPE_TIME = 5; var TYPE_JUMIN = 6; var TYPE_BIZNO = 7; var TYPE_ORGNO = 8; var TYPE_CORPNO = 9; var TYPE_ZIPCODE = 10; var TYPE_NUMCODE = 11; var TYPE_ENGCODE = 12; var TYPE_KOR = 20; var TYPE_ENG = 21; var TYPE_NUM = 22; var TYPE_KORENG = 23; var TYPE_KORNUM = 24; var TYPE_ENGNUM = 25; var TYPE_EMAIL = 30; var TYPE_URL = 31; var TYPE_TEL = 32; var TYPE_LOWERENGNUM = 33; var TYPE_CAL = 34; var TYPE_SPCHAR = 35; function unformat() { for(i = 0; i < document.forms.length; i++) { var form = document.forms[i]; for(j = 0; j < form.elements.length; j++) { if(form.elements[j].type == "text" || form.elements[j].type == "password") { //valdation type을 정의한 필드에 대해서만 '-' 부호를 제거해 준다. if( form.elements[j].getAttribute("won") != null || form.elements[j].getAttribute("yearmonth") != null || form.elements[j].getAttribute("date") != null || form.elements[j].getAttribute("time") != null || form.elements[j].getAttribute("jumin") != null || form.elements[j].getAttribute("bizno") != null || form.elements[j].getAttribute("orgno") != null || form.elements[j].getAttribute("zipcode") != null || form.elements[j].getAttribute("corpno") != null || form.elements[j].getAttribute("numcode") != null ) { form.elements[j].value = form.elements[j].value.replace(/(\,|\-|\:)/g,"");; } } } } } function __fomat() { switch(this.elementType) { case TYPE_WON : var sWon = this.value.replace(/(^(0)*|,)/g, ""); // 앞에서 발생하는 무의미한 0와 중간의 ,(Comma)를 제거한다. var tWon = ""; var i; var j = 0; var tLen = sWon.length; for(i=0; i= 33 && nKeyCode <= 40) || nKeyCode == 45 || nKeyCode == 46) return; switch(this.elementType) { case TYPE_WON : insertSeperatorByWon(this, ","); break; case TYPE_YEAR : break; case TYPE_YEARMONTH : insertSeperatorByYearMonth(this, "-"); break; case TYPE_DATE : insertSeperatorByDate(this, "-"); break; case TYPE_TIME : insertSeperatorByTime(this, ":"); break; case TYPE_JUMIN : insertSeperatorByJumin(this, "-"); break; case TYPE_BIZNO : insertSeperatorByBizno(this, "-"); break; case TYPE_ORGNO : insertSeperatorByOrgno(this, "-"); break; case TYPE_ZIPCODE : insertSeperatorByZipcode(this, "-"); break; case TYPE_CORPNO : insertSeperatorByCorpNo(this, "-"); break; case TYPE_NUMCODE : case TYPE_ENGCODE : case TYPE_KOR : case TYPE_ENG : case TYPE_NUM : case TYPE_KORENG : case TYPE_KORNUM : case TYPE_ENGNUM : case TYPE_EMAIL : case TYPE_URL : case TYPE_TEL : case TYPE_LOWERENGNUM : case TYPE_CAL : case TYPE_SPCHAR : break; } if(this.getAttribute("keyUp")) { var fn = eval(this.getAttribute("keyUp")); } } function __onkeydown() { if(this.getAttribute("keyDown")) { var fn = eval(this.getAttribute("keyDown")); } } function __onfocus() { if(this.select) { this.select(); } if(this.getAttribute("focus")) { var fn = eval(this.getAttribute("focus")); } } function __onchange(){ if(this.getAttribute("change")) { var fn = eval(this.getAttribute("change")); } } function __onclick(){ if(this.getAttribute("click")) { var fn = eval(this.getAttribute("click")); } } function __onblur() { if(window.event.keyCode == 9) return; var title = this.getAttribute("title")?this.getAttribute("title"):"입력자료"; var name = this.name; // 범위 검사 if(this.getAttribute("range")) { var range = this.getAttribute("range").split("-"); if(range.length == 2) { var str = trimAll(this.value); if(strlen(str) != 0 && !(strlen(str) >= range[0] && strlen(str) <= range[1])) { if(range[0] == range[1]) { window.alert(title + "은(는) " + range[0] +"자로 입력하세요."); this.focus(); } else { window.alert(title + "은(는) 최소 " + range[0] +"자, 최대 " + range[1] + "자로 입력하세요."); this.focus(); } this.value = str; this.focus(); return; } this.value = str; } } // 유효성 검사 switch(this.elementType) { case TYPE_YEAR : var str = this.value; if(str != "") { if(str != "" && !(parseInt(str) >= 1900 && parseInt(str) <= 2100)) { window.alert("[" + str + "]은(는) 유효한 " + title + "이(가) 아닙니다."); this.focus(); this.value = str; return; } this.value = str; } break; case TYPE_YEARMONTH : var sep = "-" // 구분자 var str = this.value; if(str != "") { var arr = new Array(); arr = str.split(sep); if(arr.length != 2) { window.alert(title + "은(는) [" + sep + "]로 구분해야 합니다."); this.value = str; return; } if(!ValidYear(arr[0]) || !ValidMonth(arr[1])) { window.alert("[" + str + "]은(는) 유효한 " + title + "이(가) 아닙니다."); this.focus(); this.value = str; return; } if(arr[1].length == 1) { arr[1] = "0" + arr[1]; } this.value = arr[0] + sep + arr[1]; } break; case TYPE_DATE : var sep = "-"; var str = this.value; if(str != "") { var arr = new Array(); arr = str.split(sep); if(arr.length != 3) { window.alert(title + "은(는) [" + sep + "]로 구분해야 합니다."); this.focus(); this.value = str; return; } if(!ValidDate(arr[0], arr[1], arr[2])) { window.alert("[" + str + "]은(는) 유효한 " + title + "이(가) 아닙니다."); this.focus(); this.value = str; return; } if(arr[1].length == 1) { arr[1] = "0" + arr[1]; } if(arr[2].length == 1) { arr[2] = "0" + arr[2]; } this.value = arr[0] + sep + arr[1] + sep + arr[2]; } break; case TYPE_TIME : var sep = ":" // 구분자 var str = this.value; if(str != "") { var arr = new Array(); arr = str.split(sep); if(arr.length != 2) { window.alert(title + "은(는) [" + sep + "]로 구분해야 합니다."); this.focus(); this.value = str; return; } if(!ValidHour(arr[0]) || !ValidMinute(arr[1])) { window.alert("[" + str + "]은(는) 유효한 " + title + "이(가) 아닙니다."); this.focus(); this.value = str; return; } if(arr[1].length == 1) { arr[1] = "0" + arr[1]; } this.value = arr[0] + sep + arr[1]; } break; case TYPE_JUMIN : var sep = "-"; var str = this.value; if(str != "") { var arr = new Array(); arr = str.split(sep); if(arr.length != 2) { window.alert(title + "은(는) [" + sep + "]로 구분해야 합니다."); this.focus(); this.value = str; return; } if(!ValidSize(arr[0], 6, 6)) { window.alert(title + "의 앞자리는 " + 6 + "자로 입력하세요."); this.focus(); this.value = str; return; } if(!ValidSize(arr[1], 7, 7)) { window.alert(title + "의 뒷자리는 " + 7 + "자로 입력하세요."); this.focus(); this.value = str; return; } var year = (parseInt(arr[0].substring(0, 2)) < 5)?"20":"19"; if(!ValidDate(year + arr[0].substring(0, 2), arr[0].substring(2, 4), arr[0].substring(4, 6))) { window.alert(title + "의 생년월일이 정확하지 않습니다."); this.focus(); this.value = str; return; } var hap = 0; for(var i = 0; i < 6; i++) { var temp = arr[0].charAt(i) *(i+2); hap += temp; } if(!(arr[0] == "000000" && arr[1] == "0000000")) { var n1 = arr[1].charAt(0); var n2 = arr[1].charAt(1); var n3 = arr[1].charAt(2); var n4 = arr[1].charAt(3); var n5 = arr[1].charAt(4); var n6 = arr[1].charAt(5); var n7 = arr[1].charAt(6); hap += n1*8+n2*9+n3*2+n4*3+n5*4+n6*5; hap %= 11; hap = 11 - hap; hap %= 10; if(hap != n7) { window.alert(title + "이(가) 유효하지 않습니다. 확인 후 다시 입력하세요."); this.focus(); this.value = str; return; } } this.value = str; } break; case TYPE_EMAIL : //var sep = ":" // 구분자 re = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; var str = this.value; if(str != "") { if(!re.test(str)) { window.alert("e-mail 주소가 유효하지 않습니다. 확인 후 다시 입력하세요."); this.focus(); this.value = str; return; } } break; case TYPE_NONE : // TYPE_NONE의 경우 document 내의 모든 element가 해당되므로 validation 검사를 하지않는다. break; } if(this.getAttribute("blur")) { var fn = eval(this.getAttribute("blur")); } } function notifyWonDomEvent() { for(i = 0; i < document.forms.length; i++) { var form = document.forms[i]; for(j = 0; j < form.elements.length; j++) { switch(form.elements[j].type) { // 내장된 키워드가 있을 경우 오른쪽 정렬, 영숫자만 입력이 가능하도록 설정한다. case "password" : case "text" : if(form.elements[j].getAttribute("won") != null) { insertSeperatorByWon(form.elements[j], ","); } break; default: break; } } } } function enableDomEvent() { for(i = 0; i < document.forms.length; i++) { var form = document.forms[i]; for(j = 0; j < form.elements.length; j++) { switch(form.elements[j].type) { // 내장된 키워드가 있을 경우 오른쪽 정렬, 영숫자만 입력이 가능하도록 설정한다. case "password" : case "text" : if(form.elements[j].getAttribute("won") != null) { form.elements[j].elementType = TYPE_WON; form.elements[j].style.textAlign = "right"; form.elements[j].style.paddingRight = "2px"; form.elements[j].style.imeMode = "disabled"; insertSeperatorByWon(form.elements[j], ","); } else if(form.elements[j].getAttribute("year") != null) { form.elements[j].elementType = TYPE_YEAR; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("yearmonth") != null) { form.elements[j].elementType = TYPE_YEARMONTH; form.elements[j].style.imeMode = "disabled"; insertSeperatorByYearMonth(form.elements[j], "-"); } else if(form.elements[j].getAttribute("date") != null) { form.elements[j].elementType = TYPE_DATE; form.elements[j].style.imeMode = "disabled"; insertSeperatorByDate(form.elements[j], "-"); } else if(form.elements[j].getAttribute("time") != null) { form.elements[j].elementType = TYPE_TIME; form.elements[j].style.imeMode = "disabled"; insertSeperatorByTime(form.elements[j], ":"); } else if(form.elements[j].getAttribute("jumin") != null) { form.elements[j].elementType = TYPE_JUMIN; form.elements[j].style.imeMode = "disabled"; insertSeperatorByJumin(form.elements[j], "-"); } else if(form.elements[j].getAttribute("bizno") != null) { form.elements[j].elementType = TYPE_BIZNO; form.elements[j].style.imeMode = "disabled"; insertSeperatorByBizno(form.elements[j], "-"); } else if(form.elements[j].getAttribute("corpno") != null) { form.elements[j].elementType = TYPE_CORPNO; form.elements[j].style.imeMode = "disabled"; insertSeperatorByCorpNo(form.elements[j], "-"); } else if(form.elements[j].getAttribute("orgno") != null) { form.elements[j].elementType = TYPE_ORGNO; form.elements[j].style.imeMode = "disabled"; insertSeperatorByOrgno(form.elements[j], "-"); } else if(form.elements[j].getAttribute("zipcode") != null) { form.elements[j].elementType = TYPE_ZIPCODE; form.elements[j].style.imeMode = "disabled"; insertSeperatorByZipcode(form.elements[j], "-"); } else if(form.elements[j].getAttribute("kor") != null) { form.elements[j].elementType = TYPE_KOR; form.elements[j].style.imeMode = "active"; } else if(form.elements[j].getAttribute("eng") != null) { form.elements[j].elementType = TYPE_ENG; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("num") != null) { form.elements[j].elementType = TYPE_NUM; form.elements[j].style.textAlign = "right"; form.elements[j].style.paddingRight = "2px"; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("num2") != null) { form.elements[j].elementType = TYPE_NUM; form.elements[j].style.textAlign = "left"; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("numcode") != null) { form.elements[j].elementType = TYPE_NUMCODE; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("engcode") != null) { form.elements[j].elementType = TYPE_ENGCODE; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("koreng") != null) { form.elements[j].elementType = TYPE_KORENG; form.elements[j].style.imeMode = "active"; } else if(form.elements[j].getAttribute("kornum") != null) { form.elements[j].elementType = TYPE_KORNUM; form.elements[j].style.imeMode = "active"; } else if(form.elements[j].getAttribute("engnum") != null) { form.elements[j].elementType = TYPE_ENGNUM; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("email") != null) { form.elements[j].elementType = TYPE_EMAIL; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("url") != null) { form.elements[j].elementType = TYPE_URL; form.elements[j].style.imeMode = "inactive"; } else if(form.elements[j].getAttribute("tel") != null) { form.elements[j].elementType = TYPE_TEL; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("lowerengnum") != null) { form.elements[j].elementType = TYPE_LOWERENGNUM; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("cal") != null) { form.elements[j].elementType = TYPE_CAL; form.elements[j].style.imeMode = "disabled"; } else if(form.elements[j].getAttribute("spchar") != null) { form.elements[j].elementType = TYPE_SPCHAR; form.elements[j].style.imeMode = "active"; } else { form.elements[j].elementType = TYPE_NONE; form.elements[j].style.imeMode = "active"; } //All Object 적용되 않고, 프로젝트 환경에 따라 별도의 Function적용이 가능하도록 if 문으로 처리함 if(form.elements[j].onkeypress==undefined ||form.elements[j].onkeypress==null){ form.elements[j].onkeypress = __onkeypress; } if(form.elements[j].onkeyup==undefined ||form.elements[j].onkeyup==null){ form.elements[j].onkeyup = __onkeyup; } if(form.elements[j].onkeydown==undefined ||form.elements[j].onkeydown==null){ form.elements[j].onkeydown = __onkeydown; } // if(form.elements[j].format==undefined ||form.elements[j].format==null){ // form.elements[j].format = __fomat; // } if(form.elements[j].onfocus==undefined ||form.elements[j].onfocus==null){ form.elements[j].onfocus = __onfocus; } break; default: break; } } } } function amtLimit(ctl, limit, msg){ var nAmt = 0; if(ctl.value == "") ctl.value = "0"; nAmt = parseInt(del_comma(ctl), 10); nAmt = nAmt % limit; if (nAmt > 0){ alert(msg); ctl.value="0"; ctl.focus(); return false; } return true; } function insertSeperatorByWon(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); var signFlag = false; if(str.indexOf("-") != -1) { str = removeString(str, "-"); signFlag = true; } var size = 3; var strMain = ""; var strTail = ""; var strTemp = ""; var strSep = sep; if(str.indexOf(".") != -1) { strMain = str.substring(0, str.indexOf(".")); strTail = str.substring(str.indexOf(".")); } else { strMain = str; } if(str.indexOf(".") == -1) // 소수점이 없을경우 -> ,(Comma)로 분할한다 { var strMainLength = strMain.length; if(strMainLength > size) { var divLength = parseInt((strMainLength)/ size); var remLength = parseInt((strMainLength)% size); if (remLength > 0) { strTemp = strMain.substring(0, remLength) + strSep; } for (var i=0; i < divLength; i++) { if (i == 0) { strTemp = strTemp + strMain.substring(remLength, remLength + size); } else { strTemp = strTemp + strSep + strMain.substring(remLength + (size * i), remLength + (size * i) + size); } } } else { strTemp = strMain; } obj.value = (signFlag?"-":"") + strTemp + strTail; } else // 소수점이 있을 경우 { var strMainLength = strMain.length; if(strMainLength <= size) // 소수점이 있고 소수점이상이 3자리를 초과하지 않을경우 -> 소수점이상 그대로 복사 { strTemp = strMain; } else // 소수점이 있고 소수점이상이 3자리를 초과할 경우 -> 소수점이상 ,(Comma)로 분할한다. { var divLength = parseInt((strMainLength)/ size); var remLength = parseInt((strMainLength)% size); if (remLength > 0) { strTemp = strMain.substring(0, remLength) + strSep; } for (var i = 0; i < divLength; i++) { if (i == 0) { strTemp = strTemp + strMain.substring(remLength, remLength + size); } else { strTemp = strTemp + strSep + strMain.substring(remLength + (size * i), remLength + (size * i) + size); } } } obj.value = (signFlag?"-":"") + strTemp + strTail; } } function insertSeperatorByYearMonth(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); if(str.length == 4) { obj.value = str.substring(0, 4); } else if(str.length > 4) { obj.value = str.substring(0, 4) + sep + str.substring(4, (str.length > 6)?6:str.length); } } function insertSeperatorBySsn(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); if(str.length == 6) { obj.value = str.substring(0, 6); } else if(str.length > 6) { obj.value = str.substring(0, 6) + sep + str.substring(6, (str.length > 13)?13:str.length); } } function insertSeperatorByDate(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); if(str.length == 4) { obj.value = str.substring(0, 4); } else if(str.length > 4 && str.length < 6) { obj.value = str.substring(0, 4) + sep + str.substring(4, (str.length>6)?6:str.length); } else if(str.length == 6) { obj.value = str.substring(0, 4) + sep + str.substring(4, 6); } else if(str.length > 6) { obj.value = str.substring(0, 4) + sep + str.substring(4, 6) + sep + str.substring(6, (str.length > 8)?8:str.length); } } function insertSeperatorByTime(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); if(str.length == 2) { obj.value = str.substring(0, 2); } else if(str.length > 2) { obj.value = str.substring(0, 2) + sep + str.substring(2, (str.length > 4)?4:str.length); } } function insertSeperatorByDay(obj, sep) { return insertSeperatorByDate(obj, sep); } function insertSeperatorByJumin(obj, sep) { return insertSeperatorBySsn(obj, sep); } function insertSeperatorByCorpNo(obj, sep) { return insertSeperatorBySsn(obj, sep); } function insertSeperatorByBrn(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); if(str.length == 3) { obj.value = str.substring(0, 3); } else if(str.length > 3 && str.length < 5) { obj.value = str.substring(0, 3) + sep + str.substring(3, (str.length>5)?5:str.length); } else if(str.length == 5) { obj.value = str.substring(0, 3) + sep + str.substring(3, 5); } else if(str.length > 5) { obj.value = str.substring(0, 3) + sep + str.substring(3, 5) + sep + str.substring(5, (str.length > 10)?10:str.length); } } function insertSeperatorByBizno(obj, sep) { return insertSeperatorByBrn(obj, sep); } function insertSeperatorByOrgno(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); if(str.length == 2) { obj.value = str.substring(0, 2); } if(str.length > 2) { obj.value = str.substring(0, 2) + sep + str.substring(2, (str.length>8)?8:str.length); } } function insertSeperatorByZipcode(obj, sep) { if(!isObject(obj)) return false; var str = trimAll(obj.value); str = removeString(str, sep); if(str.length == 3) { obj.value = str.substring(0, 3); } else if(str.length > 3) { obj.value = str.substring(0, 3) + sep + str.substring(3, (str.length > 6)?6:str.length); } } /** * A-2. Input Object가 실제로 페이지상에 존재하는 HTMLObject인지를 검사한다. * * @param obj Object ID * @return */ function isObject(obj) { if(typeof(obj) != "object") { // window.alert("Object가 존재하지 않습니다. Object의 철자를 확인하세요."); return false; } return true; } /** * A-3. Input Object가 Array 형태인지 검사한다. * * @param obj Object ID * @return */ function isArray(obj) { if((typeof(obj) != "object") || (typeof(obj[0]) != "object")) { // window.alert("element(checkbox)가 Array가 아닙니다."); return false; } return true; } /** * B-10. Input 문자열의 지정문자를 제거한다. * * @param str 문자열 * @return */ function removeString(str, delStr) { var oldVal = str + ""; var newVal = ""; var n = oldVal.length; for(var i=0; i