$(function(){ $.extend( $.validator.messages, { required: "필수 항목입니다.", remote: "항목을 수정하세요.", email: "유효하지 않은 E-Mail주소입니다.", url: "유효하지 않은 URL입니다.", date: "올바른 날짜를 입력하세요.", dateISO: "올바른 날짜(ISO)를 입력하세요.", number: "유효한 숫자가 아닙니다.", digits: "숫자만 입력 가능합니다.", creditcard: "신용카드 번호가 바르지 않습니다.", equalTo: "같은 값을 다시 입력하세요.", extension: "올바른 확장자가 아닙니다.", maxlength: $.validator.format( "{0}자를 넘을 수 없습니다. " ), minlength: $.validator.format( "{0}자 이상 입력하세요." ), rangelength: $.validator.format( "문자 길이가 {0} 에서 {1} 사이의 값을 입력하세요." ), range: $.validator.format( "{0} 에서 {1} 사이의 값을 입력하세요." ), max: $.validator.format( "{0} 이하의 값을 입력하세요." ), min: $.validator.format( "{0} 이상의 값을 입력하세요." ) } ); $.validator.addMethod( "passwordValid", function( value, element ) { return this.optional(element) || /^.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/.test(value); }, "비밀번호를 확인하세요 (영문, 숫자, 특수문자를 혼합하여 8 ~ 15자 이내)" ); $.validator.addMethod( "phoneValid", function( phoneNumber, element ) { var tel = /^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/; if(this.optional(element) || (tel.test(phoneNumber))){ trans_num = phoneNumber.replace(/^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})-?([0-9]{3,4})-?([0-9]{4})$/, "$1-$2-$3"); //$(element).val(trans_num); } return this.optional(element) || (tel.test(phoneNumber)); }, "올바르지 않은 전화번호 입니다." ); $.validator.addMethod( "idValid", function( value, element ) { return this.optional(element) || /^[A-Za-z0-9+]*$/.test(value); }, "영문, 숫자만 입력해주세요." ); $.validator.addMethod( "dateTime", function( value, element ) { return this.optional(element) || /[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]/.test(value); }, "날짜형식을 올바르게 입력해주세요 yyyy-mm-dd hh:mm" ); $.validator.addMethod( "date", function( value, element ) { var date_pattern = /^(19|20)\d{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$/ return (this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString())) && ( this.optional(element) || date_pattern.test(value) ); }, "날짜형식을 올바르게 입력해주세요 yyyy-mm-dd" ); $.validator.addMethod( "minDate", function( value, element ) { return (this.optional(element) || new Date(value) >= new Date("1900-01-01")) && ( this.optional(element) || /[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/.test(value) ); }, "1900-01-01 이전 날짜는 입력하실 수 없습니다." ); $.validator.addMethod( "maxDate", function( value, element ) { return ( this.optional(element) || new Date(value).format("yyyy-MM-dd") <= new Date().format("yyyy-MM-dd") ) && ( this.optional(element) || /[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/.test(value) ); }, "현재보다 미래 날짜는 입력하실 수 없습니다." ); $("form input:text").keydown(function(evt) { if (evt.keyCode == 13) { return false; } }); }); function getAjax( url, vv, success, error, done ){ $.ajax({ url : url, data : vv, method : "POST", dataType : "json", success : function( data ){ if( typeof success == "function" ){ success( data ); }; }, error : function(){ if( typeof error == "function" ) { error(); }; } }).done( function(){ if( typeof done == "function" ){ done(); }; }); }; function onlyNumber() { if((event.keyCode<48) || (event.keyCode>57)) { event.returnValue = false; } } function juso() { new daum.Postcode({ oncomplete: function(data) { // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분. // 각 주소의 노출 규칙에 따라 주소를 조합한다. // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다. var addr = ''; // 주소 변수 var extraAddr = ''; // 참고항목 변수 //사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다. if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우 addr = data.roadAddress; } else { // 사용자가 지번 주소를 선택했을 경우(J) addr = data.jibunAddress; } // 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다. if(data.userSelectedType === 'R'){ // 법정동명이 있을 경우 추가한다. (법정리는 제외) // 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다. if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){ extraAddr += data.bname; } // 건물명이 있고, 공동주택일 경우 추가한다. if(data.buildingName !== '' && data.apartment === 'Y'){ extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName); } // 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다. if(extraAddr !== ''){ extraAddr = ' (' + extraAddr + ')'; } // 조합된 참고항목을 해당 필드에 넣는다. //document.getElementById("detailAddr").value = extraAddr; } else { //document.getElementById("detailAddr").value = ''; } // 우편번호와 주소 정보를 해당 필드에 넣는다. /* document.getElementById('sample6_postcode').value = data.zonecode; */ document.getElementById("mainAddr").value = addr + " " + extraAddr; // 커서를 상세주소 필드로 이동한다. document.getElementById("detailAddr").focus(); } }).open(); } function setCookie(cookieName, value, exdays){ var exdate = new Date(); exdate.setDate(exdate.getDate() + exdays); var cookieValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toGMTString()); document.cookie = cookieName + "=" + cookieValue; } function deleteCookie(cookieName){ var expireDate = new Date(); expireDate.setDate(expireDate.getDate() - 1); document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString(); } function getCookie(cookieName) { cookieName = cookieName + '='; var cookieData = document.cookie; var start = cookieData.indexOf(cookieName); var cookieValue = ''; if(start != -1){ start += cookieName.length; var end = cookieData.indexOf(';', start); if(end == -1)end = cookieData.length; cookieValue = cookieData.substring(start, end); } return unescape(cookieValue); } function alertBox( obj ) { var type = "alert"; var title = "알림"; var txt = ""; var callBack = function(){}; console.log( "typeof obj : " + typeof obj ); if( typeof obj == "object" ) { if( typeof obj.type != "undefined" ) { type = obj.type; } if( typeof obj.title != "undefined" ) { title = obj.title; } if( typeof obj.txt != "undefined" ) { txt = obj.txt; } if( typeof obj.callBack == "function" ) { callBack = obj.callBack; } } modal({ type: type, title: title, text: txt, callback: function(result){ if( type == "confirm" ) { callBack( result ); } else { callBack(); } }, buttonText: { ok: '확인', yes: 'Yes', cancel: 'Cancel' } }); } function inputYMDNumber(obj) { // @see DELETE 키버튼이 눌리지 않은 경우에만 실행 if(event.keyCode != 8) { // @see 숫자와 하이픈(-)기호의 값만 존재하는 경우 실행 if(obj.value.replace(/[0-9 \-]/g, "").length == 0) { // @see 하이픈(-)기호를 제거한다. let number = obj.value.replace(/[^0-9]/g,""); let ymd = ""; // @see 문자열의 길이에 따라 Year, Month, Day 앞에 하이픈(-)기호를 삽입한다. if(number.length < 4) { return number; } else if(number.length < 6){ ymd += number.substr(0, 4); ymd += "-"; ymd += number.substr(4); } else { ymd += number.substr(0, 4); ymd += "-"; ymd += number.substr(4, 2); ymd += "-"; ymd += number.substr(6); } obj.value = ymd; } else { //@see 숫자와 하이픈(-)기호 이외의 모든 값은 삭제한다. obj.value = obj.value.replace(/[^0-9 ^\-]/g,""); return false; } } else { return false; } } function getNowYmd(){ var date = new Date(); var year = date.getFullYear(); var month = new String(date.getMonth()+1); var day = new String(date.getDate()); // 한자리수일 경우 0을 채워준다. if(month.length == 1){ month = "0" + month; } if(day.length == 1){ day = "0" + day; } return year + "-" + month + "-" + day; } Date.prototype.format = function(f) { if (!this.valueOf()) return " "; var weekName = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]; var d = this; return f.replace(/(yyyy|yy|MM|dd|E|hh|mm|ss|a\/p)/gi, function($1) { switch ($1) { case "yyyy": return d.getFullYear(); case "yy": return (d.getFullYear() % 1000).zf(2); case "MM": return (d.getMonth() + 1).zf(2); case "dd": return d.getDate().zf(2); case "E": return weekName[d.getDay()]; case "HH": return d.getHours().zf(2); case "hh": return ((h = d.getHours() % 12) ? h : 12).zf(2); case "mm": return d.getMinutes().zf(2); case "ss": return d.getSeconds().zf(2); case "a/p": return d.getHours() < 12 ? "오전" : "오후"; default: return $1; } }); }; String.prototype.string = function(len){var s = '', i = 0; while (i++ < len) { s += this; } return s;}; String.prototype.zf = function(len){return "0".string(len - this.length) + this;}; Number.prototype.zf = function(len){return this.toString().zf(len);};