/** * sv.js - Simple Validation * * v0.1, 2009-06-01 * * 클라이언트용 form 밸리데이션 플러그인 */ (function($) { // validator Object를 Singleton 으로 생성 $.fn.sv = function(options){ if(!this.length){ alert('처리할 폼이 없습니다.'); return false; } var validator = $.data(this[0],'_validator_'); // 첫번째 폼에서 simplevalidator 라는 키로 validator 객체 갖고온다. if(validator == undefined){ // 없다면 새로 만든다. validator = new $.fn.validator(options, this[0]); $.data(this[0], '_validator_', validator); } if(validator.settings.checkOnSubmit){ $(this[0]).bind('submit',function(){ return validator.validate(); }); } return validator; }; // validator Object $.fn.validator = function(options, form) { // 셋팅 this.settings = $.extend( {}, $.fn.validator.defaults, options ); // 선택된 폼 this.currentForm = form; // 에러메지시들 this.errorMsgs = []; }; // validator Object 확장 $.extend($.fn.validator, { // 기본 옵션값 defaults: { checkOnSubmit: false // 서브밋시 자동으로 체크여부 , rules: [] // 적용할 validation rule , stopOnFirstError: true // 에러메시지 보여주기, all or first 둘중에 하나 선택가능 , errorTitle: '확인해 주세요' // 에러보여줄때 타이틀 , errorCss: null // 에러난 form object 표시할 스타일명 , errorViewHandler: null // 에러난 내용을 표시할 콜백함수 , onSuccessHandler: null // 밸리데이션 성공시 콜백 , onFailHandler: null // 밸리데이션 실패시 콜백 , debug: false } // 기본 메시지 ,messages: { notApplicable: '적용할수 없습니다.' , notAmethod: '검증 메소드가 없습니다.' , required: '반드시 입력해야 합니다.' , minLength: '입력값의 최소 길이는 {0}자 입니다.' , maxLength: '입력값의 최대 길이는 {0}자 입니다.' , minByte: '입력값은 적어도 {0}byte 이상 입력해야 합니다.' , maxByte: '입력값은 {0}byte 를 넘을수 없습니다.' , number: '숫자가 아닙니다.' , digit: '숫자만 입력가능합니다.' , email: '이메일 형식이 아닙니다.' , url: 'url 형식이 아닙니다.' , engNum: '영어와 숫자만 입력 가능 합니다.' , method: '메소드 검증이 실패하였습니다.' , equalTo: '{0} 필드와 값이 틀립니다.' , minSel: '적어도 {0}개 이상 선택해야 합니다.' , maxSel: '최대 {0}개 까지 선택 가능합니다.' , PasswordChecked: '유효하지 않은 비밀번호입니다. 비밀번호에 아이디가 포함될 수 없으며, 같은 문자를 4번이상 사용 할 수 없습니다.' , BusinessNumber: '유효하지 않은 사업자 번호입니다' , userPwd: '비밀번호는 문자, 숫자, 특수문자의 조합으로 9~16자리로 입력해주세요.' , continuityPwd: '연속된 문자열(123 또는 321, abc, cba 등)을\n 3자 이상 사용 할 수 없습니다.' //, userPwd: '비밀번호는 문자, 숫자의 조합으로 8~16자리로 입력해주세요.' , birthChk: '비밀번호에 생년월일이 들어갈 수 없습니다.' , birthYyyyChk: '비밀번호에 생년월일의 년도가 들어갈 수 없습니다.' , birthMmDdChk: '비밀번호에 생년월일의 월일이 들어갈 수 없습니다.' , birth14: '만 14세 미만 회원은 14세 미만 회원 가입을 통해 가입 하실 수 있습니다.' } /* * form 에 속한 엘리먼트 name 으로 해당 validation에 필요한 elementObj를 만들어 낸다. */ ,makeElementObj: function(elementName, form){ var obj = $(":input[name="+elementName+"]",form); var label = $("label[for="+elementName+"]",form); var tagName = obj.get(0).tagName.toLowerCase(); var tagType = obj.get(0).type; var tagLength = obj.length; var title; if(obj.get(0).title){ title = obj.get(0).title; }else if(label){ var lb = label.html(); if(lb != null && lb != "") { lb = lb.replace(/<[^>]+>/ig,""); } title = lb; }else{ title = elementName; } var elementObj = {}; elementObj.obj = obj; elementObj.tagName = tagName; elementObj.tagType = tagType; elementObj.tagLength = tagLength; elementObj.name = elementName; elementObj.title = title; return elementObj; } ,addMethod: function(name, method, message) { $.fn.validator.methods[name] = method; $.fn.validator.messages[name] = message != undefined ? message : $.fn.validator.messages[name]; if (method.length < 3) { //$.fn.validator.addClassRules(name, $.fn.validator.normalizeRule(name)); } } /* * 메지시를 포맷한다. */ ,format: function(source, params) { if ( arguments.length == 1 ) return function() { var args = $.makeArray(arguments); args.unshift(source); return $.validator.format.apply( this, args ); }; if ( arguments.length > 2 && params.constructor != Array ) { params = $.makeArray(arguments).slice(1); } if ( params.constructor != Array ) { params = [ params ]; } $.each(params, function(i, n) { source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); }); return source; } /* * 바이트수를 갖고온다. */ ,getbyte: function(string){ var l = 0; for (var i=0; i 128) ? 2 : 1; } return l; } /* * 기본 ErrorHandler */ ,defaultErrorViewHandler: function(errTitle, errMsgs){ alert(errTitle+"\n"+errMsgs.join("\n")); } ,prototype:{ validate: function(){ // 기존 에러메시지 클리어 this.errorMsgs = []; var validationState = true; for(element in this.settings.rules){ // element가 존재하고 disabled가 아닐때 if(this.currentForm[element] && !this.currentForm[element].disabled){ if(this.settings.debug){ if(window.console){ console.debug("element name is : " + element); } } var rules = this.settings.rules[element]; var errObj = {}; // 에러 오브젝트를 담는 함수 for ( var i in rules) { var param = rules[i].split(","); // 룰과 에러메시지를 자른다. var rule = param.shift().split("="); var ruleName = rule.shift(); var ruleParam = rule; var errorMsg = param; var method = $.fn.validator.methods[ruleName]; if(method){ // 검증위한 오브젝트를 생성한다. var elementObj = $.fn.validator.makeElementObj(element, this.currentForm); var result = method.call(this,elementObj,ruleParam); // 에러일 겨우 여기서 메지시 처리를 한다.(커스텀 메시지 포함) if(!result){ // 커스텀 메시지가 있으면 해당 메시지를 넣는다 var msg; if(!errorMsg || errorMsg == null || errorMsg.length == 0){ msg = $.fn.validator.messages[ruleName]; }else{ msg = errorMsg.toString(); } if(ruleName == 'equalTo'){ var tempParamObj = $.fn.validator.makeElementObj(ruleParam, this.currentForm); ruleParam = '['+tempParamObj.title+']'; } msg = $.fn.validator.format(msg,ruleParam); this.errorMsgs.push('['+elementObj.title+'] : '+msg); elementObj.obj.addClass(this.settings.errorCss); validationState = false; if(this.settings.stopOnFirstError){ // 에러난 곳에서 fucus //elementObj.obj.focus(); break; }else{ errObj[elementObj.obj] = 'error'; } }else{ // 에러 클래스 삭제 if(!errObj[elementObj.obj]){ elementObj.obj.removeClass(this.settings.errorCss); } } }else{ if(this.settings.debug){ if(window.console){ console.debug("\t\tcan not apply method : " + ruleName); } } } } }else{ if(this.settings.debug){ if(window.console){ console.debug("invalid element : " + element); } } } if(!validationState){ if(this.settings.stopOnFirstError){ break; } } } // 결과값을 체크 if(!validationState){ // 에러뷰 확인해서 사용자 에러뷰가 있으면 실행 없으면 기본 if(this.settings.errorViewHandler && typeof(this.settings.errorViewHandler) == 'function'){ this.settings.errorViewHandler(this.errorTitle, this.errorMsgs); }else{ $.fn.validator.defaultErrorViewHandler(this.settings.errorTitle, this.errorMsgs); } if(this.settings.onFailHandler && typeof(this.settings.onFailHandler) == 'function'){ this.settings.onFailHandler(this); } }else{ if(this.settings.onSuccessHandler && typeof(this.settings.onSuccessHandler) == 'function'){ this.settings.onSuccessHandler(this); } } return validationState; } } /* * rule 검증 메소드 */ ,methods: { /* * 반드시 필요 */ required: function(element){ var length; // 선택 혹은 입력 여부를 판단하기 위한 변수 switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': length = element.obj.filter(":checked").length; break; case 'radio': length = element.obj.filter(":checked").length; break; default: length = element.obj.val().length; break; } break; case 'select': length = element.obj.find('option:selected:first').val().length; break; case 'textarea': length = element.obj.val().length; break; } if(length > 0){ return true; }else{ return false; } } /* * 문자열 최소 길이 */ , minLength: function(element, size){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if(element.obj.val().length >= size){ result = true; }else{ result = false; } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if(element.obj.val().length >= size){ result = true; }else{ result = false; } break; } return result; } /* * 문자열 최대길이 */ , maxLength: function(element, size){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if(element.obj.val().length <= size){ result = true; }else{ result = false; } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if(element.obj.val().length <= size){ result = true; }else{ result = false; } break; } return result; } /* * 문자열 최소 바이트 */ , minByte: function(element, size){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if($.fn.validator.getbyte(element.obj.val()) >= size){ result = true; }else{ result = false; } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if($.fn.validator.getbyte(element.obj.val()) >= size){ result = true; }else{ result = false; } break; } return result; } /* * 문자열 최대 바이트 */ , maxByte: function(element, size){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if($.fn.validator.getbyte(element.obj.val()) <= size){ result = true }else{ result = false; } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if($.fn.validator.getbyte(element.obj.val()) <= size){ result = true }else{ result = false; } break; } return result; } /* * 숫자만. */ , number: function(element){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if(element.obj.val().length > 0){ result = /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(element.obj.val()); } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if(element.obj.val().length > 0){ result = /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(element.obj.val()); } break; } return result; } /* * 이메일형태 */ , email: function(element){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if(element.obj.val().length > 0){ result = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(element.obj.val()); } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if(element.obj.val().length > 0){ result = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(element.obj.val()); } break; } return result; } /* * url형태 */ , url: function(element){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if(element.obj.val().length > 0){ result = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(element.obj.val()); } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if(element.obj.val().length > 0){ result = /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(element.obj.val()); } break; } return result; } /* * 영어+숫자 */ , engNum: function(element){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if(element.obj.val().length > 0){ result = /(^[a-zA-Z0-9\-_]+$)/i.test(element.obj.val()); } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if(element.obj.val().length > 0){ result = /(^[a-zA-Z0-9\-_]+$)/i.test(element.obj.val()); } break; } return result; } /* * 아라비아 숫자만 */ , digit: function(element){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': //TODO 처리기준 확정 break; case 'radio': //TODO 처리기준 확정 break; default: if(element.obj.val().length > 0){ result = /(^[0-9]+$)/i.test(element.obj.val()); } break; } break; case 'select': //TODO 처리기준 확정 break; case 'textarea': if(element.obj.val().length > 0){ result = /(^[0-9]+$)/i.test(element.obj.val()); } break; } return result; } , method: function(element, callback){ var result = true; var method = window[callback]; if(typeof(method) == 'function'){ result = method.call(element); } return result; } /* * 같아야됨. */ , equalTo: function(element, srcEle){ var srcEleObj = $.fn.validator.makeElementObj(srcEle, this.currentForm); return element.obj.val() == srcEleObj.obj.val(); } /* * 생일체크 월일 */ , birthChk: function(element, srcEle){ var birthStr = srcEle+""; var arrBirth = birthStr.split('^'); var srcEleObjYyyy = $.fn.validator.makeElementObj(arrBirth[0], this.currentForm); var srcEleObjMm = $.fn.validator.makeElementObj(arrBirth[1], this.currentForm); var srcEleObjDd = $.fn.validator.makeElementObj(arrBirth[2], this.currentForm); var srcEleVal = srcEleObjYyyy.obj.val()+srcEleObjMm.obj.val()+srcEleObjDd.obj.val(); var eleVal = element.obj.val(); return eleVal.indexOf(srcEleVal) == -1; } /* * 생일체크 년도 */ , birthYyyyChk: function(element, srcEle) { var srcEleObj = $.fn.validator.makeElementObj(srcEle, this.currentForm); var srcEleVal = srcEleObj.obj.val(); var eleVal = element.obj.val(); return eleVal.indexOf(srcEleVal) == -1; } /* * 생일체크 */ , birthMmDdChk: function(element, srcEle){ var birthStr = srcEle+""; var arrBirth = birthStr.split('^'); var srcEleObjMm = $.fn.validator.makeElementObj(arrBirth[0], this.currentForm); var srcEleObjDd = $.fn.validator.makeElementObj(arrBirth[1], this.currentForm); var srcEleVal = srcEleObjMm.obj.val()+srcEleObjDd.obj.val(); var eleVal = element.obj.val(); return eleVal.indexOf(srcEleVal) == -1; } /* * 생일체크 만 14세 체크 로직 */ , birth14: function(element, srcEle){ var jumin1 = element.obj.val(); var jumin2 = $.fn.validator.makeElementObj(srcEle, this.currentForm).obj.val(); var curDateObj = new Date(); var age = 0; var type = jumin2.substring(0, 1); var curYear = parseInt(curDateObj.getFullYear()); var birYear = parseInt(jumin1.substring(0, 2)); var tmpYear = 0; /* 주민번호 뒷자리 첫번째 번호로 년도를 구한다. */ if(type <= 2) tmpYear = 1900; else tmpYear = 2000; /* 현재 년도에서 minus 한다. */ tmpYear = curYear - tmpYear; /* 생일년도를 뺀다. */ age = tmpYear - birYear + 1; return age >= 15; } /* * 최소 숫자 */ /* minval: function(element, val){ if(this.settings.debug){ if(window.console){ console.debug("\t\tmethod 'minval' called, argumets is : " + arguments); } } }, */ /* * 최대숫자 */ /* maxval: function(element, val){ if(this.settings.debug){ if(window.console){ console.debug("\t\tmethod 'maxval' called, argumets is : " + arguments); } } }, */ /* * 최소 선택 */ , minSel: function(element, val){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': var len = 0; $(element.obj).each(function(i){ alert( $(this).attr('checked')); if( $(this).attr('checked')){ len++; } }); if(len < val){ result = false; } break; default: break; } break; case 'select': var len = $('option:selected',element.obj).length; if(len < val){ result = false; } break; case 'textarea': break; } return result; } /* * 최대선택 */ , maxSel: function(element, val){ var result = true; switch(element.tagName){ case 'input': switch(element.tagType){ case 'checkbox': var len = 0; $(element.obj).each(function(i){ alert( $(this).attr('checked')); if( $(this).attr('checked')){ len++; } }); if(len > val){ result = false; } break; default: break; } break; case 'select': var len = $('option:selected',element.obj).length; if(len > val){ result = false; } break; case 'textarea': break; } return result; } /* * 패스워드 */ ,PasswordChecked:function (element, idName) { var regexp1 = /(\w)\1\1\1/; var passStr1 = element.obj.val(); var idStr = $.fn.validator.makeElementObj(idName, this.currentForm); // 아이디 if (passStr1.length == 0) { return true; } else if (passStr1.indexOf(idStr.obj.val()) > -1) { return false; // 비밀번호에 아이디가 포함되어 있어서는 안됩니다 } else if (passStr1.match(regexp1) != null) { return false; // 비밀번호에 같은 문자를 4번 이상 사용하실 수 없습니다 } return true; } /* * 사업자등록번호 * */ ,BusinessNumber:function (element) { // 사업자번호 오류검증 // 아래 공식으로 계산후 10의 배수가 나오면 검증일치 var num = new Array(); num[0] = 1; num[1] = 3; num[2] = 7; num[3] = 1; num[4] = 3; num[5] = 7; num[6] = 1; num[7] = 3; num[8] = 5; var totalNumber = 0; var _num = 0; var str = element.obj.val(); for (i = 0; i < str.length-1; i++) { _num = parseInt(str.charAt(i)) * num[i]; _num = "" + _num; if (i < 8) { totalNumber = totalNumber + parseInt(_num.charAt(_num.length-1)); } else { totalNumber = (_num.charAt(_num.length-2) == "") ? totalNumber + 0 : totalNumber + parseInt(_num.charAt(_num.length-2)); totalNumber = totalNumber + parseInt(_num.charAt(_num.length-1)); } } totalNumber = totalNumber + parseInt(str.charAt(str.length-1)); var num1 = str.substring(0,3); var num2 = str.substring(3,5); var num3 = str.substring(5,10); if (str == "") { return true; // 아무것도 입력하지 않은경우 } else if (num1.length != 3 || num2.length != 2 || num3.length != 5) { return false; } else if (totalNumber%10 != 0) { return false; } else { return true; } } //주민번호1(필드하나가 모두) //주민번호2(필드 두개 합쳐서) /* * 비밀번호는 문자, 숫자, 특수문자의 조합으로 6~16자리 * */ ,userPwd:function (element) { var obj = element.obj.val(); if(!obj.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~,(,),+])|([!,@,#,$,%,^,&,*,?,_,~,(,),+].*[a-zA-Z0-9])/)) //if(!obj.match(/^.*(?=.*[0-9])(?=.*[a-zA-Z]).*$/)) { return false; } return true; } /* * 연속된 문자열(123 또는 321, abc, cba 등)을 3자 이상 사용 할 수 없습니다. * */ ,continuityPwd:function (element) { var obj = element.obj.val(); var alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; var number ="1234567890"; var sChar = "~!@#$%^&*()_+|`-=\\{}:\"<>?[];,./"; var total = alpha + number + sChar; var result_alpha = 0; var result_number = 0; var result_sChar = 0; var result_hangle = 0; var chr_pass_0 = ""; var chr_pass_1 = ""; var chr_pass_2 = ""; for (var i = 0; i < obj.length; i++){ if (total.indexOf (obj.charAt(i)) == -1) result_hangle = 1; if (alpha.indexOf (obj.charAt(i)) != -1) result_alpha = 1; if (number.indexOf(obj.charAt(i)) != -1) result_number = 1; if (sChar.indexOf (obj.charAt(i)) != -1) result_sChar = 1; chr_pass_2 = chr_pass_1; chr_pass_1 = chr_pass_0; chr_pass_0 = obj.charAt(i); //연속성(+) 카운드 if((chr_pass_0.charCodeAt(0) - chr_pass_1.charCodeAt(0) == 1)&& (chr_pass_1.charCodeAt(0) - chr_pass_2.charCodeAt(0) == 1)) { return false } //연속성(-) 카운드 if((chr_pass_0.charCodeAt(0) - chr_pass_1.charCodeAt(0) == -1)&& (chr_pass_1.charCodeAt(0) - chr_pass_2.charCodeAt(0) == -1)){ return false } } return true; } } }); })(jQuery);