/******************************************************** 파일명 : lib.valid.js 설 명 : 폼 유효성 체크 javascript 모음 작성자 : 김현배 작성일 : 2008.08.18 수정일 : 2008.08.18 *********************************************************/ //에러메시지 포멧 정의 var NO_BLANK = "{name+을를} 입력하지 않으셨습니다."; var NO_SELECT = "{name+이가} 선택되지 않았습니다."; var NO_GRP_BLANK = "{name+을를} 모두 입력 혹은 선택하여 주십시오"; var NOT_VALID = "{name+이가} 형식에 맞지 않습니다."; var TOO_LONG = "{name}의 길이가 초과되었습니다"; var TOO_SHORT = "{name}의 길이가 부족합니다"; var GLOBAL_FORM = null; var name = ""; var SELF_MSG = null; //스트링 객체에 메소드 추가 String.prototype.trim = function(str) { str = this != window ? this : str; return str.replace(/^\s+/g,'').replace(/\s+$/g,''); } String.prototype.hasFinalConsonant = function(str) { str = this != window ? this : str; var strTemp = str.substr(str.length-1); return ((strTemp.charCodeAt(0)-16)%28!=0); } function josa(str,tail) { return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2); } /** 함수명 : isValid 설 명 : 지정한 Object Control에 대한 유효성 검사를 진행한다. 인 자 : object, alert창에서 나타낼 object이름, 필수여부, *패턴명, 최소입력byte, 최대입력byte, 자동alert메세지 대체 메세지 *패턴명 : bizno : 사업자등록번호 유효성검사 date : 날짜 유효성검사 email : 이메일 유효성 검사 email12 : 이메일 유효성 검사 engonly : 영문여부 검사 hangul : 한글여부 검사 hangulonly : 한글여부 검사 jumin : 주민등록번호 유효성검사(xxxxxx-xxxxxxxx) jumin1 : 주민등록번호 유효성검사(앞 6자리) jumin2 : 주민등록번호 유효성검사(뒤 7자리) mobile : 휴대폰 번호 유효성 검사 number : 숫자여부 검사 number2 : 숫자여부 검사(',', '.'허용) phone : 전화번호 유효성 검사 userid : 아이디 유효성 검사 userpw : 비밀번호 유효성 검사 리 턴 : 유효성 검사여부(true, false) 사용법 : if(isValid(form.id, "아이디", true, 패턴명, 4, 12)){ return; } if(isValid(form.id, "아이디", true, 패턴명, 4, 12, "아이디를 입력하세요")){ return; } */ function isValid(ctl, hname, isRequired, checkPattern, minByte, maxByte, selfMsg){ if(selfMsg != null){ SELF_MSG = selfMsg; name = selfMsg; } else { name = hname; } //필수여부 if (isRequired){ //select, checkbox 구문 처리 if(ctl.length > 1){ if(ctl[0].type != null){ try{ if(ctl.type.indexOf("checkbox")>-1 || ctl.type.indexOf("radio")>-1){ if(!validChecked(ctl)){ return doError(ctl,NO_SELECT); } } }catch(e){ if(ctl[0].type.indexOf("checkbox")>-1 || ctl[0].type.indexOf("radio")>-1){ if(!validChecked(ctl)){ return doError(ctl,NO_SELECT); } } } } else { if (ctl.selectedIndex==0) { return doError(ctl,NO_SELECT); } } } else { if(ctl.type.indexOf("select")>-1){ if (ctl.selectedIndex==0) { return doError(ctl,NO_SELECT); } } else if(ctl.type.indexOf("checkbox")>-1 || ctl.type.indexOf("radio")>-1){ if(!validChecked(ctl)){ return doError(ctl,NO_SELECT); } }else{ if (ctl.value == null || ctl.value == "") { return doError(ctl,NO_BLANK); } } } } //패턴체크 if(checkPattern != null && checkPattern != ""){ if (!funcs[checkPattern](ctl)){ return false; } } //MIN byte체크 if(minByte != null && minByte != 0){ if (ctl.value != "") { var len = 0; for(j=0; j 128) ? 2 : 1 } if (len < parseInt(minByte)) { return doError(ctl,TOO_SHORT,"del",minByte); //2008.09.05 //doError()함수에 "del"추가 //자동으로 value값 null되고 해당 focus로 이동 } } } //MAX byte체크 if(maxByte != null && maxByte != 0){ if (ctl.value != "") { var len = 0; for(j=0; j 128) ? 2 : 1 } if (len > parseInt(maxByte)) { return doError(ctl,TOO_LONG,"del",maxByte); //2008.09.05 //doError()함수에 "del"추가 //자동으로 value값 null되고 해당 focus로 이동 } } } return true; } //checkbox, radio컨트롤이 체크되었는지 확인한다. function validChecked(ctl){ if(ctl == null){ return false; } if(ctl.length > 1){ for(i = 0; i < ctl.length; i++){ if(ctl[i].checked){ return true; } } } else { return ctl.checked; } } //에러메세지 출력및 focusing등등 내부에러처리 //doValid, doFormVaild에서 내부적으로 사용 function doError(ctl,type,action,byte) { var pattern = /{([a-zA-Z0-9_]+)\+?([가-힣]{2})?}/; pattern.exec(type); var tail = (RegExp.$2) ? josa(eval(RegExp.$1),RegExp.$2) : ""; if(SELF_MSG != null){ alert(SELF_MSG); } else { alert(type.replace(pattern,eval(RegExp.$1) + tail).replace(pattern,byte)); } if (action == "sel") { ctl.select(); } else if (action == "del") { ctl.value = ""; } try{ if (ctl.getAttribute("UNFOCUSED") == null) { ctl.focus(); } }catch(e){} return false; } /// 특수 패턴 검사 함수 매핑 /// var funcs = new Array(); funcs['email'] = isValidEmail; funcs['email12'] = isValidEmail12; funcs['phone'] = isValidPhone; funcs['mobile'] = isValidMobile; funcs['userid'] = isValidUserid; funcs['userpw'] = isValidUserpw; funcs['hangul'] = hasHangul; funcs['number'] = isNumeric; funcs['number2'] = isNumeric2; funcs['engonly'] = alphaOnly; funcs['hangulonly'] = hangulOnly; funcs['jumin'] = isValidJumin; funcs['bizno'] = isValidBizNo; funcs['date'] = isValidDate; funcs['jumin1'] = isValidJumin1; funcs['jumin2'] = isValidJumin2; /// 패턴 검사 함수들 /// function isValidEmail(ctl) { var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/; if (pattern.exec(ctl.value)) { return (pattern.test(ctl.value)) ? true : doError(ctl,NOT_VALID); } else { return doError(ctl,NOT_VALID); } } /// 패턴 검사 함수들 /// function isValidEmail12(ctl) { var ctlid = ctl.id; var ctl1 = GLOBAL_FORM["email_domain"]; var ctl2 = GLOBAL_FORM["email_id"]; var emailValue = ctl1.value + "@" + ctl2.value; var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/; if (pattern.exec(emailValue)) { return (pattern.test(emailValue)) ? true : doError(ctl,NOT_VALID); } else { return doError(ctl,NOT_VALID); } } //아이디 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidUserid(ctl) { var pattern = /^[a-zA-Z0-9_]{1}[a-zA-Z0-9_]{3,11}$/; return (pattern.test(ctl.value)) ? true : doError(ctl,"{name+은는} 4~12자 이내의 영문과 숫자로 입력하셔야 합니다."); //2009.4.13 한자혜 : 6~12자, 입력한 내용 지우지 않게 수정함 //var pattern = /^[a-zA-Z0-9_]{1}[a-zA-Z0-9_]{5,11}$/; //return (pattern.test(ctl.value)) ? true : doError(ctl,"{name+은는} 6~12자 이내의 영문과 숫자로 입력하셔야 합니다."); } //비밀번호 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidUserpw(ctl) { var pattern = /^[a-zA-Z0-9_]{1}[a-zA-Z0-9_]{3,7}$/; return (pattern.test(ctl.value)) ? true : doError(ctl,"{name+은는} 4~8자 이내로 입력하셔야 합니다.","del"); /* var pattern = /^[a-zA-Z0-9_]{1}[a-zA-Z0-9_]{5,11}$/; return (pattern.test(ctl.value)) ? true : doError(ctl,"{name+은는} 6~12자 이내로 입력하셔야 합니다.","del"); */ } //한글포함여부 조사 //doValid, doFormVaild에서 내부적으로 사용 function hasHangul(ctl) { var pattern = /[가-힣]/; return (pattern.test(ctl.value)) ? true : doError(ctl,"{name+은는} 반드시 한글을 포함해야 합니다"); } //한글만 입력되었는지 여부 조사 //doValid, doFormVaild에서 내부적으로 사용 function hangulOnly(ctl) { var pattern = /^[가-힣]+$/; return (pattern.test(ctl.value)) ? true : doError(ctl,NOT_VALID); } //영문만 입력되었는지 여부 조사 //doValid, doFormVaild에서 내부적으로 사용 function alphaOnly(ctl) { var pattern = /^[a-zA-Z]+$/; return (pattern.test(ctl.value)) ? true : doError(ctl,NOT_VALID); } //숫자여부 조사 //doValid, doFormVaild에서 내부적으로 사용 function isNumeric(ctl) { var pattern = /^[0-9]+$/; return (pattern.test(ctl.value)) ? true : doError(ctl,"{name+은는} 반드시 숫자로만 입력해야 합니다"); } //숫자여부 조사 단 ',', '.'은 허용 //doValid, doFormVaild에서 내부적으로 사용 function isNumeric2(ctl) { var pattern = /^[0-9,.]+$/; return (pattern.test(ctl.value)) ? true : doError(ctl,"{name+은는} 반드시 숫자로만 입력해야 합니다"); } //주민등록번호 유효성검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidJumin1(ctl) { var pattern = /^[0-9]{6}$^/; var num = ctl.value; if (!pattern.test(num)) return doError(ctl,NOT_VALID); } //주민등록번호 유효성검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidJumin2(ctl) { var pattern = /^([0-9]{7})$^/; var num = ctl.value; if (!pattern.test(num)) return doError(ctl,NOT_VALID); } //주민등록번호 유효성검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidJumin(ctl) { var pattern = /^([0-9]{6})-?([0-9]{7})$/; var num = ctl.value; if (!pattern.test(num)) return doError(ctl,NOT_VALID); num = RegExp.$1 + RegExp.$2; var sum = 0; var last = num.charCodeAt(12) - 0x30; var bases = "234567892345"; for (var i=0; i<12; i++) { if (isNaN(num.substring(i,i+1))) return doError(ctl,NOT_VALID); sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30); } var mod = sum % 11; return ((11 - mod) % 10 == last) ? true : doError(ctl,NOT_VALID); } //사업자등록번호 유효성검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidBizNo(ctl) { var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/; var num = ctl.value; if (!pattern.test(num)) return doError(ctl,NOT_VALID); num = RegExp.$1 + RegExp.$2 + RegExp.$3; var cVal = 0; for (var i=0; i<8; i++) { var cKeyNum = parseInt(((_tmp = i % 3) == 0) ? 1 : ( _tmp == 1 ) ? 3 : 7); cVal += (parseFloat(num.substring(i,i+1)) * cKeyNum) % 10; } var li_temp = parseFloat(num.substring(i,i+1)) * 5 + '0'; cVal += parseFloat(li_temp.substring(0,1)) + parseFloat(li_temp.substring(1,2)); return (parseInt(num.substring(9,10)) == 10-(cVal % 10)%10) ? true : doError(ctl,NOT_VALID); } //전화번호 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidPhone(ctl) { var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/; if (pattern.exec(ctl.value)) { if(RegExp.$1 == "02" || RegExp.$1 == "031" || RegExp.$1 == "032" || RegExp.$1 == "033" || RegExp.$1 == "041" || RegExp.$1 == "042" || RegExp.$1 == "043" || RegExp.$1 == "051" || RegExp.$1 == "052" || RegExp.$1 == "053" || RegExp.$1 == "054" || RegExp.$1 == "055" || RegExp.$1 == "061" || RegExp.$1 == "062" || RegExp.$1 == "063" || RegExp.$1 == "064") { ctl.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3; } return true; } else { return doError(ctl,NOT_VALID); } } //휴대폰번호 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidMobile(ctl) { var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/; if (pattern.exec(ctl.value)) { if(RegExp.$1 == "011" || RegExp.$1 == "016" || RegExp.$1 == "017" || RegExp.$1 == "018" || RegExp.$1 == "019" || RegExp.$1 == "010") { ctl.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3; } return true; } else { return doError(ctl,NOT_VALID); } } //날짜 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function isValidDate(ctl) { var oDateStr = ctl.value; oDateStr = replaceAll(oDateStr, "-", ""); oDateStr = replaceAll(oDateStr, ".", ""); oDateStr = replaceAll(oDateStr, "/", ""); var oDate = new Date(oDateStr.substr(0,4),oDateStr.substr(4,2)-1,oDateStr.substr(6,2)); var oYearStr=oDate.getFullYear(); var oMonthStr=(oDate.getMonth()+1).toString(); oMonthStr = (oMonthStr.length ==1) ? "0"+ oMonthStr: oMonthStr; var oDayStr=oDate.getDate().toString(); oDayStr = (oDayStr.length ==1) ? "0"+ oDayStr: oDayStr; return (oDateStr == oYearStr+oMonthStr+oDayStr) ? true : doError(ctl,NOT_VALID); } //날짜 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function makeValidationDate(obj,obj_year,obj_month,obj_day){ if(obj_month.value.length==1) obj_month.value = "0" + obj_month.value; if(obj_day.value.length==1) obj_day.value = "0" + obj_day.value; obj.value = obj_year.value+obj_month.value+obj_day.value; } //날짜 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function makeValidationDate_Sel(obj,obj_year,obj_month,obj_day){ if(obj_month.options[obj_month.selectedIndex].value.length==1) var t_month = "0" + obj_month.options[obj_month.selectedIndex].value; else var t_month = obj_month.options[obj_month.selectedIndex].value; if(obj_day.options[obj_day.selectedIndex].value.length==1) var t_day = "0" + obj_day.options[obj_day.selectedIndex].value; else var t_day = obj_day.options[obj_day.selectedIndex].value; obj.value = obj_year.options[obj_year.selectedIndex].value+t_month+t_day; } //날짜 유효성 검사 //doValid, doFormVaild에서 내부적으로 사용 function checkDate(start_date_ctl, end_date_ctl, msg){ //하나도 입력하지 않았을경우는 true if(start_date_ctl.value == "" && end_date_ctl.value == ""){ return true; } //하나만 입력한 경우는 false if(start_date_ctl.value != ""){ if(end_date_ctl.value == ""){ alert("기간검색은 조건을 모두 선택해야 합니다."); return false; } } if(end_date_ctl.value != ""){ if(start_date_ctl.value == ""){ alert("기간검색은 조건을 모두 선택해야 합니다."); return false; } } if(start_date_ctl.value.length != 10 || end_date_ctl.value.length != 10){ alert("테이터 포멧이 올바르지 않습니다."); return false; } var start_time = parseInt(replaceAll(start_date_ctl.value, ".", "")); var end_time = parseInt(replaceAll(end_date_ctl.value, ".", "")); var dur = start_time - end_time; if(dur > 0){ alert("검색기간 종료일자가 검색기간 시작일자보다 이전입니다.!"); return false; } return true; } // 주민등록 유효성검사 function isValidJuminNo(juminno) { if(juminno=="" || juminno==null || juminno.length!=13) { alert("주민등록번호를 적어주세요."); return false; } var jumin1 = juminno.substr(0,6); var jumin2 = juminno.substr(6,7); var yy = jumin1.substr(0,2); // 년도 var mm = jumin1.substr(2,2); // 월 var dd = jumin1.substr(4,2); // 일 var genda = jumin2.substr(0,1); // 성별 var msg, ss, cc; // 숫자가 아닌 것을 입력한 경우 if (!isNumeric(jumin1)) { alert("주민등록번호 앞자리를 숫자로 입력하세요."); return false; } // 길이가 6이 아닌 경우 if (jumin1.length != 6) { alert("주민등록번호 앞자리를 다시 입력하세요."); return false; } // 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사 if (yy < "00" || yy > "99" || mm < "01" || mm > "12" || dd < "01" || dd > "31") { alert("주민등록번호 앞자리를 다시 입력하세요."); return false; } // 숫자가 아닌 것을 입력한 경우 if (!isNumeric(jumin2)) { alert("주민등록번호 뒷자리를 숫자로 입력하세요."); return false; } // 길이가 7이 아닌 경우 if (jumin2.length != 7) { alert("주민등록번호 뒷자리를 다시 입력하세요."); return false; } // 성별부분이 1 ~ 4 가 아닌 경우 if (genda < "1" || genda > "4") { alert("주민등록번호 뒷자리를 다시 입력하세요."); return false; } // 연도 계산 - 1 또는 2: 1900년대, 3 또는 4: 2000년대 cc = (genda == "1" || genda == "2") ? "19" : "20"; // 첫번째 자료에서 연월일(YYMMDD) 형식 중 날짜 형식 검사 if (isValidDate(cc+yy+mm+dd) == false) { alert("주민등록번호 앞자리를 다시 입력하세요."); return false; } // Check Digit 검사 if (!isSSN(jumin1, jumin2)) { alert("유효한 주민등록번호가 아닙니다"); return false; } return true; } // 주민등록 유효성검사 function isValidResdNo1(resdNo1) { var yy = parseInt(resdNo1.substr(0,2)); // 년도 var mm = parseInt(resdNo1.substr(2,2)); // 월 var dd = parseInt(resdNo1.substr(4,2)); // 일 // 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사 if ( mm < 1 || mm > 12 || dd < 1 || dd > 31){ return false; } return true; } function isValidDate(iDate) { if( iDate.length != 8 ) { return false; } oDate = new Date(); oDate.setFullYear(iDate.substring(0, 4)); oDate.setMonth(parseInt(iDate.substring(4, 6)) - 1); oDate.setDate(iDate.substring(6)); if( oDate.getFullYear() != iDate.substring(0, 4) || oDate.getMonth() + 1 != iDate.substring(4, 6) || oDate.getDate() != iDate.substring(6) ){ return false; } return true; } function isNumeric(s) { for (i=0; i "9") return false; } return true; } function isSSN(s1, s2) { n = 2; sum = 0; for (i=0; i