/***************************************************************************************************
* 함수 재정의
**************************************************************************************************/
/* 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($("