(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.methods.number = function (value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); } $.validator.methods.min = function (value, element, param) { let globalizedValue = value.replace(",", "."); return this.optional(element) || globalizedValue >= param; } $.validator.methods.max = function (value, element, param) { let globalizedValue = value.replace(",", "."); return this.optional(element) || globalizedValue <= param; } $.validator.methods.range = function (value, element, param) { let globalizedValue = value.replace(",", "."); return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); } $.validator.addMethod('hangul', function (value, element) { // (자음, 모음만 있는 한글은 처리하지 않습니다.) return this.optional(element) || validHangul(value); }, '한글로 입력해주세요.'); $.validator.addMethod('alpha_num_under', function (value, element) { return this.optional(element) || /(^[a-zA-Z0-9\_]+$)/.test(value); }, '영문, 숫자, _ 가 아닙니다.'); $.validator.addMethod('alpha_dash', function (value, element) { return this.optional(element) || /(^[a-zA-Z0-9\_\-]+$)/.test(value); }, '영문, 숫자, _ , - 가 아닙니다.'); $.validator.addMethod('valid_tinymce', function (value, element) { return validTinyEditor($(element).attr('name'), $(element).attr('id'), value, 'valid'); }, '내용을 입력해주세요'); $.validator.addMethod('required_tinymce', function (value, element) { return validTinyEditor($(element).attr('name'), $(element).attr('id'), value, 'required'); }, '내용을 입력해주세요'); $.validator.addMethod("greaterThan", function (value, element, params) { let target = $(params).val(); let isValueNumeric = !isNaN(parseFloat(value)) && isFinite(value); let isTargetNumeric = !isNaN(parseFloat(target)) && isFinite(target); if (isValueNumeric && isTargetNumeric) { return Number(value) > Number(target); } if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) > new Date(target); } }, '날짜를 확인해주세요.'); $.validator.addMethod('is_phone', function (value) { return isValidPhone(value); // 성공예시 : 010-XXXX-XXXX 또는 010XXXXXXXX }, '연락처 형식이 잘못되었습니다.'); $.validator.addMethod('is_ip', function (value) { return isValidIP(value); // 성공예시 : 192.168.56.101 }, 'IP 형식이 잘못되었습니다.'); $.validator.addMethod('is_comma_digits', function (value) { // 콤마(`,`)가 추가된 숫자형태 인가? return $.isNumeric(value.replace(',', '')); }, '숫자를 입력해주세요.'); $.validator.addMethod("greaterThan", function (value, element, params) { if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) >= new Date($(params).val()); } if(this.optional(element)) { return true; } return isNaN(value) && isNaN($(params).val()) || (Number(value) > Number($(params).val())); }, '기간 입력 날짜가 잘못되었습니다.'); $.validator.addMethod("contains", function (value, element, param) { // [] 배열안에 문자가 포함되어 있는가? let contains = false; for (let i = 0; i < param.length; i++) { if (value.includes(param[i])) { contains = true; } } return this.optional(element) || contains; }, ""); $.validator.addMethod('file_size', function (value, element, param) { return this.optional(element) || (element.files[0].size <= param * 1000000); }, '파일은 최대 `{0}MB`까지 첨부 가능합니다.'); $.validator.addMethod('numeric', function (value, element, param) { // 숫자가 몇개 이상인지 확인 let i = 0; let character = ''; let count = 0; while (i <= value.length) { character = value.charAt(i); // 해당 index에 문자 반환 if (!isNaN(character * 1)) { count++; } i++; } }, '소문자가 {0}개 이상 포함되어야 합니다.'); $.validator.addMethod('uppercase', function (value, element, param) { // 대문자가 몇개 이상인지 확인 let i = 0; let character = ''; let count = 0; while (i <= value.length) { character = value.charAt(i); // 해당 index에 문자 반환 if (character === character.toUpperCase()) { count++; } i++; } }, '대문자가 {0}개 이상 포함되어야 합니다.'); $.validator.addMethod('lowercase', function (value, element, param) { // 소문자가 몇개 이상인지 확인 let i = 0; let character = ''; let count = 0; while (i <= value.length) { character = value.charAt(i); // 해당 index에 문자 반환 if (character === character.toLowerCase()) { count++; } i++; } }, '소문자가 {0}개 이상 포함되어야 합니다.'); // 이메일 유효성 확인 $.validator.addMethod('is_email_able', function (value, element) { let ret = ''; $.ajax({ headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, url: BASE_URL + '/api/isEmailAble', type: 'POST', dataType: 'JSON', async: false, cache: false, data: {email: value}, success: function (res) { ret = res; } }); return ret; }, '이 이메일은 사용하실 수 없습니다.'); // 비밀번호 유효성 확인 $.validator.addMethod('is_password_able', function (value, element) { let ret = ''; $.ajax({ headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, url: BASE_URL + '/api/isPasswordAble', type: 'POST', dataType: 'JSON', async: false, cache: false, data: {password: value}, success: function (res) { ret = res; } }); return ret; }, '이 비밀번호는 사용하실 수 없습니다.'); // 연락처 유효성 확인 $.validator.addMethod('is_phone_able', function (value, element) { let ret = ''; $.ajax({ headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, url: BASE_URL + '/api/isPhoneAble', type: 'POST', dataType: 'JSON', async: false, cache: false, data: {phone: value}, success: function (res) { ret = res; } }); return ret; }, '이 연락처는 사용하실 수 없습니다.'); // 닉네임 유효성 확인 $.validator.addMethod('is_nickname_able', function (value, element) { let ret = ''; $.ajax({ headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}, url: BASE_URL + '/api/isNicknameAble', type: 'POST', dataType: 'JSON', async: false, cache: false, data: {nickname: value}, success: function (res) { ret = res; } }); return ret; }, '이 닉네임은 사용하실 수 없습니다.'); }(jQuery)); function validHangul(fld) { let pattern = /([^가-힣\x20])/i; return (!pattern.test(fld) ? true : false); } function validTinyEditor(name, id, value, stype) { if (tinymce.editors.length > 0) { // let editorData = tinymce.activeEditor.getContent({format: 'raw'}); // tinymce 안에 데이터 조회 let editorData = tinymce.EditorManager.get(id).getContent({format: 'raw'}); // tinymce 안에 데이터 조회 // 아무 값이 없으면 영역을 비어둔다. if ($.inArray(editorData.toLowerCase().replace(/^\s*|\s*$/g, ''), [' ', '
', '
', '