/*************************************************************************************************** * 함수 재정의 **************************************************************************************************/ /* valid 함수 호출시 기존에 dialog가 띄워져 있다면 close 하는 로직을 추가한다. */ (function(){ // Store a reference to the original remove method. var originalValidMethod = $.validator.prototype.valid; // Define overriding method. $.validator.prototype.valid = function(){ // Execute the original method. return originalValidMethod.apply( this, arguments ); }; var prevFormId = ""; //기본 속성 지정[2018.03.16, kimjaeyeol] $.validator.setDefaults({ showErrors: function(errorMap, errorList){ validate.formErrors(errorMap, errorList); }, onfocusout: false, //focusout event 발생시 validate 하지 않도록 onkeyup: false, ignore: [] //hidden 포함 }); //form validation label 설정 $.each($('form'), function(i, form){ if($(form).data('valid-group')){ var formId = $(form).attr('id'); $.each($("#"+formId+" label"), function(idx, labelObj){ var id = $(this).attr("for"); var $obj = $("[name="+id+"]"); //validLabel 을 따로 선언한 경우에는 설정을 건너뛴다. if(!$obj.attr('validLabel')){ //label은 시작일자로 설정하고 시작일자의 data-end로 연결한다. if($obj.data("end")){ $obj.attr('validLabel', $(this).text()+" From"); var chainId = $obj.data("end"); $('#'+chainId).attr('validLabel', $(this).text()+" To"); }else{ $obj.attr('validLabel', $(this).text()); } } }); } }); /* 기본 제공 되는 validation 함수 •required – 필수 입력 엘리먼트입니다.(Makes the element required.) •remote – 엘리먼트의 검증을 지정된 다른 자원에 ajax 로 요청합니다.(Requests a resource to check the element for validity.) •minlength – 최소 길이를 지정합니다.(Makes the element require a given minimum length.) •maxlength – 최대 길이를 지정합니다.(Makes the element require a given maxmimum length.) •rangelength – 길이의 범위를 지정합니다.(Makes the element require a given value range.) •min – 최소값을 지정합니다.(Makes the element require a given minimum.) •max – 최대값을 지정합니다.(Makes the element require a given maximum.) •range – 값의 범위를 지정합니다.(Makes the element require a given value range.) •email – 이메일 주소형식을 가지도록 합니다.(Makes the element require a valid email) •url – url 형식을 가지도록 합니다.(Makes the element require a valid url) •date – 날짜 형식을 가지도록 합니다.(Makes the element require a date.) •dateISO – ISO 날짜 형식을 가지도록 합니다.(Makes the element require an ISO date.) •number – 10진수를 가지도록 합니다.(Makes the element require a decimal number.) •digits – 숫자 형식을 가지도록 합니다.(Makes the element require digits only.) •creditcard – 신용카드번호 형식을 가지도록 합니다.(Makes the element require a credit card number.) •equalTo – 엘리먼트가 다른 엘리먼트와 동일해야 합니다.(Requires the element to be the same as another one) */ /*************************************************************************************************** * 사용자 정의 Validation 추가 **************************************************************************************************/ //해당 Component 보다 같거나 큰지 비교 //@old - greaterOrEqualThan $.validator.addMethod( ">=number", function(value, element, params) { //params[0] : 비교할 컴포넌트 validLabel(String) //params[0] : 비교할 컴포넌트 id(String) var retValue = true; //비교할 두 값이 존재하여하고 모두 숫자여야 한다. if (value != "" && $("#" + params[1]).val() != "" && !isNaN(value) && !isNaN($("#" + params[1]).val())) { retValue = parseFloat(value) >= parseFloat($("#" + params[1]).val()); } return retValue; }, $.validator.format("{0} 보다 같거나 커야 합니다.") //{0} 보다 같거나 커야 합니다. ); //maxlength 체크 시 유니코드는 _common_divBytes 만큼 가감하여 체크 //@old - maxlengthEx $.validator.addMethod( "<=maxlength", function(value, element, params) { //params[0] : 한글 최대 입력 자리수 //params[1] : 영문 최대 입력 자리수 //비교할 두 값이 존재하여하고 모두 숫자여야 한다. if (value != "" && !isNaN(params[1])) { return (common.validateCheckByte(value) <= params[1]); } return true; }, $.validator.format("한글 {0}자, 영문 {1}자까지 입력 가능합니다.") //한글 {0}자, 영문 {1)자까지 입력 가능합니다. ); //한글은 입력 되지 않도록 체크 //@old - notInputKorean $.validator.addMethod( "!=korean", function(value, element, params) { return common.validateNotKorean(value); }, $.validator.format("한글은 입력할 수 없습니다. 다시 입력해 주십시요.") //한글은 입력할 수 없습니다. 다시 입력해 주십시요. ); //YYYYMMDD 형태인지 체크 //@old - dateYYYYMMDD $.validator.addMethod( "yyyymmdd", function(value, element, params) { var retValue = true; if (value != "") { retValue = value.isDate("YYYYMMDD"); } return retValue; }, $.validator.format("날짜형식(YYYYMMDD)에 맞지 않습니다.") //날짜형식(YYYYMMDD)에 맞지 않습니다. ); //연도 형태인지 체크 //@old - dateYYYY $.validator.addMethod( "yyyy", function(value, element, params) { var retValue = true; if (value != "") { var yyyy = Number(value); if(1000 <= yyyy && yyyy <= 9999){ retValue = true; }else{ retValue = false; } } return retValue; }, $.validator.format("입력연도가 올바르지 않습니다.") //입력연도가 올바르지 않습니다. ); //MMDD 형태인지 체크 //@old - dateMMDD $.validator.addMethod( "mmdd", function(value, element, params) { var retValue = true; if (value != "") { retValue = value.isDate("MMDD"); } return retValue; }, $.validator.format("날짜형식(MMDD)에 맞지 않습니다.") //날짜형식(MMDD)에 맞지 않습니다. ); //시작일자와 종료일자 체크 //@old - compareGridFromToDate $.validator.addMethod( ">=yyyymmdd", function(value, element, params) { //params[0] : 비교할 컴포넌트 validLabel(String) //params[1] : 비교할 컴포넌트 id(String) var retValue = true; if (value != "" && $("#" + params[1]).val() != "") { var startDate = $("#" + params[1]).val().replace(/-/g,""); var endDate = value.replace(/-/g,""); if(startDate.isDate() && endDate.isDate()){ retValue = endDate >= startDate; } } return retValue; }, $.validator.format("시작일자가 종료일자 보다 큽니다.") //시작일자가 종료일자 보다 큽니다. ); //시작연월과 종료연월 체크 //@old - compareFrToMonth $.validator.addMethod( ">=yyyymm", function(value, element, params) { //params[0] : 비교할 컴포넌트 validLabel(String) //params[1] : 비교할 컴포넌트 id(String) var retValue = true; //시작일자와 종료일자가 모두 입력되었는지 체크 if (value != "" && $("#" + params[1]).val() != "") { var toMonth = value.replace(/-/g,""); var frMonth = $("#" + params[1]).val().replace(/-/g,""); //년월 형식(YYYYMM)을 올바르게 입력한지 체크 if(toMonth.isDate("YYYYMM") && frMonth.isDate("YYYYMM")){ retValue = toMonth >= frMonth; }; } return retValue; }, $.validator.format("시작연월이 종료연월 보다 큽니다.") //시작연월이 종료연월 보다 큽니다. ); //시작연도와 종료연도 체크 //@old - compareGridFromToYear $.validator.addMethod( ">=yyyy", function(value, element, params) { //params[0] : 비교할 컴포넌트 validLabel(String) //params[1] : 비교할 컴포넌트 id(String) var retValue = true; if (value != "" && $("#" + params[1]).val() != "") { var startYear = Number($("#" + params[1]).val()); var endYear = Number(value); if((1000 <= startYear && startYear <= 9999) && (1000 <= endYear && endYear <= 9999)){ retValue = endYear >= startYear; } } return retValue; }, $.validator.format("시작연도가 종료연도 보다 큽니다.") //시작연도가 종료연도 보다 큽니다. ); //시작월일과 종료월일 체크 //@old - compareGridFromToMonth $.validator.addMethod( ">=mmdd", function(value, element, params) { //params[0] : 비교할 컴포넌트 validLabel(String) //params[1] : 비교할 컴포넌트 id(String) var retValue = true; if (value != "" && $("#" + params[1]).val() != "") { var startMonth = $("#" + params[1]).val(); var endMonth = value; if(startMonth.isDate("MMDD") && endMonth.isDate("MMDD")){ retValue = endMonth >= startMonth; } } return retValue; }, $.validator.format("시작연월이 종료연월 보다 큽니다.") //시작연월이 종료연월 보다 큽니다. ); //양의 정수만 입력할 수 있도록 함 $.validator.addMethod( "positiveInteger", function(value, element, params) { if(value == null || value == "" || value == 0) return true; return /^\+?(0|[1-9]\d*)$/.test(value); }, $.validator.format("양의 정수만 입력가능합니다.") //양의 정수만 입력가능합니다. ); //양의 실수만 입력할 수 있도록 함 $.validator.addMethod( "positiveNumber", function(value, element, params) { if(value == null || value == "" || value == 0) return true; var pattern = new RegExp("^([0-9]*[1-9][0-9]*(\.[0-9]+)?|[0]+\.[0-9]*[1-9][0-9]*)$"); return pattern.test(value); }, $.validator.format("양의 실수만 입력가능합니다.") //양의 실수만 입력가능합니다. ); //휴대폰번호 형식 체크 2015.08.04(지창용) //@old - phonenumber $.validator.addMethod( "phone", function(value, element, params) { //숫자를 제외한 문자를 공백으로 치환 var regex = /[^0-9]/g; value = value.split(regex).join(""); //휴대폰번호 형식인지 체크 var regexMdn = /^01([016789])([1-9]{1})([0-9]{2,3})([0-9]{4})$/; return regexMdn.test(value); }, $.validator.format("전화번호 형식이 올바르지 않습니다.") //전화번호 양식이 올바르지 않습니다. ); //시작시간, 종료시간 체크 $.validator.addMethod( ">=hhmm", function(value, element, params) { //params[0] : 비교할 컴포넌트 validLabel(String) //params[1] : 비교할 컴포넌트 id(String) var retValue = true; if (value != "" && $("#" + params[1]).val() != "") { var startTime = $("#" + params[1]).val(); var endTime = value; if(startTime.isNumber(false) && endTime.isNumber(false)){ retValue = endTime >= startTime; } } return retValue; }, $.validator.format("시작시간이 종료시간보다 큽니다.") //시작시간이 종료시간보다 큽니다. ); //대상 값(일자 등) 보다 큰지 체크 $.validator.addMethod( "compareValue", function(value, element, params){ //params[0] : 비교 구문 //params[1] : 비교할 값 //params[2] : 메세지 var checkValue = $.trim(value.replace(/[^0-9]/g,"")); //숫자가 아니면(문자 타입 포함) 리턴 if(!$.isNumeric(checkValue)){ return false; } checkValue = parseInt(checkValue); var targetValue = $.trim(params[1].replace(/[^0-9]/g,"")); //숫자가 아니면(문자 타입 포함) 리턴 if(!$.isNumeric(targetValue)){ return false; } targetValue = parseInt(targetValue); //var checkValue = value.replace(/-/g,""); //var targetValue = params[1].replace(/-/g,""); var retValue = true; if(checkValue != "" && params[0] != ""){ if(params[0] === ">") { retValue = checkValue > targetValue; }else if(params[0] === "<") { retValue = checkValue < targetValue; }else if(params[0] === ">=") { retValue = checkValue >= targetValue; }else if(params[0] === "<=") { retValue = checkValue <= targetValue; }else if(params[0] === "=") { retValue = (checkValue == targetValue); }else if(params[0] === "!="){ retValue = checkValue != targetValue; } } return retValue; }, $.validator.format("{2}") ); /* * 주어진 조건으로 값을 비교하여 결과를 리턴 */ var _valueTemplate = function(value, params, method){ var start = $.trim(value); //숫자가 아니면 '-' 문자 제거 if(!$.isNumeric(value)){ start = value.replace(/[^0-9]/g,""); } var end = $.trim($(params[1]).val()); if(!$.isNumeric(end)){ end = end.replace(/[^0-9]/g,""); } if(start.length === 0 || end.length === 0){ return true; } if(start.length > 0 && end.length > 0){ if(method === "<") { return start < end; }else if(method === "<=") { return start <= end; }else if(method === "==") { return (start == end); }else if(method === "!=") { return start != end; }else if(method === ">") { return start > end; }else if(method === ">=") { return start >= end; } } return false; }; /** * @보다 작아야 합니다. * params : 비교 대상 label, 비교 대상 jquery selector */ $.validator.addMethod( "<", function(value, element, params){ return _valueTemplate(value, params, '<'); }, $.validator.format("{0} 보다 작아야 합니다.") ); /** * {0} 보다 같거나 작아야 합니다. * params : 비교 대상 label, 비교 대상 jquery selector */ $.validator.addMethod( "<=", function(value, element, params){ return _valueTemplate(value, params, '<='); }, $.validator.format("{0} 보다 같거나 작아야 합니다.") ); /** * {0} 보다 커야 합니다. * params : 비교 대상 label, 비교 대상 jquery selector */ $.validator.addMethod( ">", function(value, element, params){ return _valueTemplate(value, params, '>'); }, $.validator.format("{0} 보다 커야 합니다.") ); /** * {0} 보다 같거나 커야 합니다. * params : 비교 대상 label, 비교 대상 jquery selector */ $.validator.addMethod( ">=", function(value, element, params){ return _valueTemplate(value, params, '>='); }, $.validator.format("{0} 보다 같거나 커야 합니다.") ); /** * {0} 와 같아야 합니다. * params : 비교 대상 label, 비교 대상 jquery selector */ $.validator.addMethod( "==", function(value, element, params){ return _valueTemplate(value, params, '=='); }, $.validator.format("{0} 와 같아야 합니다.") ); /** * {0} 와 달라야 합니다. * params : 비교 대상 label, 비교 대상 jquery selector */ $.validator.addMethod( "!=", function(value, element, params){ return _valueTemplate(value, params, '!='); }, $.validator.format("{0} 와 달라야 합니다.") ); //두 날짜 차이 체크 $.validator.addMethod( "dateDiff", function(value, element, params){ //params[0] : 기준 element valid label (String) //params[1] : 비교 대상 element valid label (String) //params[2] : 최대 차이 (Integer) //params[3] : diff format (days, months, years) (String) var $el = $(element); if(params[2] < common.getDateDiff(value, $("#"+$el.data('end')).val(), $el.data('datetime'), params[3])){ return false; } return true; }, $.validator.format("{0}과 {1}의 범위는 최대 {2}입니다.") //{0}과 {1}의 범위는 최대 {2}입니다. ); //dateRange 차이 체크 $.validator.addMethod( "dateRangeDiff", function(value, element, params){ //params[0] : 기준 element valid label (String) //params[1] : 최대 차이 (Integer) //params[2] : 시간, 일, 월, 년(String) //params[3] : diff format (days, months, years, hours, minutes) var picker = $(element).data('daterangepicker'); var integer = params[3] === 'hours' || params[3] === 'minutes'; var diff = picker.endDate.diff(picker.startDate, params[3], integer); return params[1] >= diff; }, $.validator.format("{0}의 범위는 최대 {1}{2} 입니다.") //{0}의 범위는 최대 {1}{2} 입니다. ); /** * {0} 과 {1} 사이에 있어야 합니다. * params : 비교 대상 label 1, 2, 비교 대상 jquery selector1, 2, day|month|year, moment include option * https://momentjs.com/docs/#/query/is-between/ */ $.validator.addMethod( "dateBetween", function(value, element, params){ var start = $(params[2]).val(); var end = $(params[3]).val(); //값이 하나라도 없으면 false if(common.isEmpty(value) || common.isEmpty(start) || common.isEmpty(end)){ return false; } //기본 일자 기준 체크 var type = params[4] || 'day'; var format = 'YYYYMMDD'; if(type === 'year'){ format = 'YYYY'; }else if(type === 'month'){ format = 'YYYYMM'; } //날짜 타입이 아니면 false if(!value.isDate(format) || !start.isDate(format) || !end.isDate(format)){ return false; } var include = params[5] || '[]'; return moment(value).isBetween(start, end, type, include); }, $.validator.format("{0} 과 {1} 사이에 있어야 합니다.") ); /** * {0} 과 {1} 사이에 있어야 합니다. * params : 비교 대상 label 1, 2, 비교 대상 jquery selector1, 2 */ $.validator.addMethod( "numberBetween", function(value, element, params){ var start = $(params[2]).val(); var end = $(params[3]).val(); //값이 하나라도 없으면 false if(common.isEmpty(value) || common.isEmpty(start) || common.isEmpty(end)){ return false; } return (value >= start && value <= end); }, $.validator.format("{0} 과 {1} 사이에 있어야 합니다.") ); }()); /*************************************************************************************************** * 함수 재정의 Validation 끝. **************************************************************************************************/ var validate = (function(){ var validate = {}; /** * Server에서 리턴된 메세지 파악해서 에러 유무 리턴 * @write: 김철현 * @param pData : server에서 Return 된 정보 @return boolean : true : 에러 있음, false :에러없음 * @since: 2014.05.12 * @old: common_confirmServerMessage */ validate.confirmServerMessage = function (pData) { var retValue = false; if (pData != undefined && pData.error_message_type) { //에러 처리 if (pData.error_message_type == "exception_session"){ //세션 만료일 경우 $(location).attr('href', "/common/forward?pageUrl=common/CommonSessionExpired"); } else if (pData.error_message_type == "exception_alert") { //alert에서는 '
' 대신 '\n' 로 replace 해주어야 줄바꿈이 된다. var message = pData.error_message.replace(/\\n/gi, "
"); //alert(message); var paramObj = { text: message, icon: 'error', hideAfter: 10000 }; common.toast(paramObj); } else if (pData.error_message_type == "exception_custom") { validate.showDialog(pData.error_message, 'warn', "확인", "", {"historyBack":pData.error_history_back,"reload":pData.error_page_reload}, "admin"); //확인 } else if (pData.error_message_type == "exception_popup") { validate.showDialog(pData.error_message, 'error', "오류 알림", "", {"historyBack":pData.error_history_back,"reload":pData.error_page_reload}, "admin"); //오류 알림 } else if (pData.error_message_type == "exception_no_auth") { validate.showDialog(pData.error_message, 'error', "오류 알림", "", {"historyBack":pData.error_history_back,"reload":pData.error_page_reload}, "admin", 'N'); //오류 알림 } retValue = true; //버튼 enable common.buttonEnable(); } return retValue; }; /** * Form Element에 대한 validate 에러 메세지 보여주기 위한 처리 * @write: 김철현 * @param pErrorMap : key - value 쌍으로 에러가 발생한 Element id 와 Error Message를 가지고 있다. * @param pErrorList : Error Elements.. * @since: 2014.05.12 * @old: common_validateFormErrors */ validate.formErrors = function (pErrorMap, pErrorList){ $("#_formValidation").children().remove(); $.each(pErrorList, function(index, errorObj) { //var parentId = $(errorObj.element).attr("validParentId"); var parentId = $(errorObj.element).closest('form').data('valid-group'); //form에 data-valid-group='title' 와 같이 설정해야 한다. if(!parentId){ parentId = $(errorObj.element).attr("validParentId"); } var parentLiId = "validation_li_" + parentId; var parentLength = $("#_formValidation").children().length; var br = ""; if(parentLength > 0){ br = "
"; } //validParentId 에 해당하는 li tag가 존재하지 않는다면 만들어 준다. if ($("#_formValidation").children("div#" + parentLiId).length == 0) { //li Object 추가 - jQuery 1.4 이후 버전에서 지원하는 방법으로 추가 $("#_formValidation").append($("
", { id: parentLiId, //html: $.trim(br+'
'+$("#" + parentId).text()+'
') html: $.trim(br+'
'+$("#" + parentId).text()+'
') })); //위에서 만든 li 하위에 ul추가 $("#_formValidation").children("div#" + parentLiId).append($("