common.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. $(function(){
  2. $.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} 이상의 값을 입력하세요." ) } );
  3. $.validator.addMethod( "passwordValid", function( value, element ) {
  4. return this.optional(element) || /^.*(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/.test(value);
  5. }, "비밀번호를 확인하세요 (영문, 숫자, 특수문자를 혼합하여 8 ~ 15자 이내)" );
  6. $.validator.addMethod( "phoneValid", function( phoneNumber, element ) {
  7. var tel = /^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})-?[0-9]{3,4}-?[0-9]{4}$/;
  8. if(this.optional(element) || (tel.test(phoneNumber))){
  9. 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");
  10. //$(element).val(trans_num);
  11. }
  12. return this.optional(element) || (tel.test(phoneNumber));
  13. }, "올바르지 않은 전화번호 입니다." );
  14. $.validator.addMethod( "idValid", function( value, element ) {
  15. return this.optional(element) || /^[A-Za-z0-9+]*$/.test(value);
  16. }, "영문, 숫자만 입력해주세요." );
  17. $.validator.addMethod( "dateTime", function( value, element ) {
  18. 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);
  19. }, "날짜형식을 올바르게 입력해주세요 yyyy-mm-dd hh:mm" );
  20. $.validator.addMethod( "date", function( value, element ) {
  21. var date_pattern = /^(19|20)\d{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[0-1])$/
  22. return (this.optional(element) || !/Invalid|NaN/.test(new Date(value).toString())) && ( this.optional(element) || date_pattern.test(value) );
  23. }, "날짜형식을 올바르게 입력해주세요 yyyy-mm-dd" );
  24. $.validator.addMethod( "minDate", function( value, element ) {
  25. 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) );
  26. }, "1900-01-01 이전 날짜는 입력하실 수 없습니다." );
  27. $.validator.addMethod( "maxDate", function( value, element ) {
  28. 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) );
  29. }, "현재보다 미래 날짜는 입력하실 수 없습니다." );
  30. $("form input:text").keydown(function(evt) {
  31. if (evt.keyCode == 13) {
  32. return false;
  33. }
  34. });
  35. });
  36. function getAjax( url, vv, success, error, done ){
  37. $.ajax({
  38. url : url,
  39. data : vv,
  40. method : "POST",
  41. dataType : "json",
  42. success : function( data ){
  43. if( typeof success == "function" ){
  44. success( data );
  45. };
  46. },
  47. error : function(){
  48. if( typeof error == "function" ) {
  49. error();
  50. };
  51. }
  52. }).done( function(){
  53. if( typeof done == "function" ){
  54. done();
  55. };
  56. });
  57. };
  58. function onlyNumber() {
  59. if((event.keyCode<48) || (event.keyCode>57)) {
  60. event.returnValue = false;
  61. }
  62. }
  63. function juso() {
  64. new daum.Postcode({
  65. oncomplete: function(data) {
  66. // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.
  67. // 각 주소의 노출 규칙에 따라 주소를 조합한다.
  68. // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
  69. var addr = ''; // 주소 변수
  70. var extraAddr = ''; // 참고항목 변수
  71. //사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
  72. if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
  73. addr = data.roadAddress;
  74. } else { // 사용자가 지번 주소를 선택했을 경우(J)
  75. addr = data.jibunAddress;
  76. }
  77. // 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다.
  78. if(data.userSelectedType === 'R'){
  79. // 법정동명이 있을 경우 추가한다. (법정리는 제외)
  80. // 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
  81. if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
  82. extraAddr += data.bname;
  83. }
  84. // 건물명이 있고, 공동주택일 경우 추가한다.
  85. if(data.buildingName !== '' && data.apartment === 'Y'){
  86. extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
  87. }
  88. // 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
  89. if(extraAddr !== ''){
  90. extraAddr = ' (' + extraAddr + ')';
  91. }
  92. // 조합된 참고항목을 해당 필드에 넣는다.
  93. //document.getElementById("detailAddr").value = extraAddr;
  94. } else {
  95. //document.getElementById("detailAddr").value = '';
  96. }
  97. // 우편번호와 주소 정보를 해당 필드에 넣는다.
  98. /* document.getElementById('sample6_postcode').value = data.zonecode; */
  99. document.getElementById("mainAddr").value = addr + " " + extraAddr;
  100. // 커서를 상세주소 필드로 이동한다.
  101. document.getElementById("detailAddr").focus();
  102. }
  103. }).open();
  104. }
  105. function setCookie(cookieName, value, exdays){
  106. var exdate = new Date();
  107. exdate.setDate(exdate.getDate() + exdays);
  108. var cookieValue = escape(value) + ((exdays==null) ? "" : "; expires=" + exdate.toGMTString());
  109. document.cookie = cookieName + "=" + cookieValue;
  110. }
  111. function deleteCookie(cookieName){
  112. var expireDate = new Date();
  113. expireDate.setDate(expireDate.getDate() - 1);
  114. document.cookie = cookieName + "= " + "; expires=" + expireDate.toGMTString();
  115. }
  116. function getCookie(cookieName) {
  117. cookieName = cookieName + '=';
  118. var cookieData = document.cookie;
  119. var start = cookieData.indexOf(cookieName);
  120. var cookieValue = '';
  121. if(start != -1){
  122. start += cookieName.length;
  123. var end = cookieData.indexOf(';', start);
  124. if(end == -1)end = cookieData.length;
  125. cookieValue = cookieData.substring(start, end);
  126. }
  127. return unescape(cookieValue);
  128. }
  129. function alertBox( obj ) {
  130. var type = "alert";
  131. var title = "알림";
  132. var txt = "";
  133. var callBack = function(){};
  134. console.log( "typeof obj : " + typeof obj );
  135. if( typeof obj == "object" ) {
  136. if( typeof obj.type != "undefined" ) {
  137. type = obj.type;
  138. }
  139. if( typeof obj.title != "undefined" ) {
  140. title = obj.title;
  141. }
  142. if( typeof obj.txt != "undefined" ) {
  143. txt = obj.txt;
  144. }
  145. if( typeof obj.callBack == "function" ) {
  146. callBack = obj.callBack;
  147. }
  148. }
  149. modal({
  150. type: type,
  151. title: title,
  152. text: txt,
  153. callback: function(result){
  154. if( type == "confirm" ) {
  155. callBack( result );
  156. } else {
  157. callBack();
  158. }
  159. },
  160. buttonText: {
  161. ok: '확인',
  162. yes: 'Yes',
  163. cancel: 'Cancel'
  164. }
  165. });
  166. }
  167. function inputYMDNumber(obj) {
  168. // @see DELETE 키버튼이 눌리지 않은 경우에만 실행
  169. if(event.keyCode != 8) {
  170. // @see 숫자와 하이픈(-)기호의 값만 존재하는 경우 실행
  171. if(obj.value.replace(/[0-9 \-]/g, "").length == 0) {
  172. // @see 하이픈(-)기호를 제거한다.
  173. let number = obj.value.replace(/[^0-9]/g,"");
  174. let ymd = "";
  175. // @see 문자열의 길이에 따라 Year, Month, Day 앞에 하이픈(-)기호를 삽입한다.
  176. if(number.length < 4) {
  177. return number;
  178. } else if(number.length < 6){
  179. ymd += number.substr(0, 4);
  180. ymd += "-";
  181. ymd += number.substr(4);
  182. } else {
  183. ymd += number.substr(0, 4);
  184. ymd += "-";
  185. ymd += number.substr(4, 2);
  186. ymd += "-";
  187. ymd += number.substr(6);
  188. }
  189. obj.value = ymd;
  190. } else {
  191. //@see 숫자와 하이픈(-)기호 이외의 모든 값은 삭제한다.
  192. obj.value = obj.value.replace(/[^0-9 ^\-]/g,"");
  193. return false;
  194. }
  195. } else {
  196. return false;
  197. }
  198. }
  199. function getNowYmd(){
  200. var date = new Date();
  201. var year = date.getFullYear();
  202. var month = new String(date.getMonth()+1);
  203. var day = new String(date.getDate());
  204. // 한자리수일 경우 0을 채워준다.
  205. if(month.length == 1){
  206. month = "0" + month;
  207. }
  208. if(day.length == 1){
  209. day = "0" + day;
  210. }
  211. return year + "-" + month + "-" + day;
  212. }
  213. Date.prototype.format = function(f) {
  214. if (!this.valueOf()) return " ";
  215. var weekName = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"];
  216. var d = this;
  217. return f.replace(/(yyyy|yy|MM|dd|E|hh|mm|ss|a\/p)/gi, function($1) {
  218. switch ($1) {
  219. case "yyyy": return d.getFullYear();
  220. case "yy": return (d.getFullYear() % 1000).zf(2);
  221. case "MM": return (d.getMonth() + 1).zf(2);
  222. case "dd": return d.getDate().zf(2);
  223. case "E": return weekName[d.getDay()];
  224. case "HH": return d.getHours().zf(2);
  225. case "hh": return ((h = d.getHours() % 12) ? h : 12).zf(2);
  226. case "mm": return d.getMinutes().zf(2);
  227. case "ss": return d.getSeconds().zf(2);
  228. case "a/p": return d.getHours() < 12 ? "오전" : "오후";
  229. default: return $1;
  230. }
  231. });
  232. };
  233. String.prototype.string = function(len){var s = '', i = 0; while (i++ < len) { s += this; } return s;};
  234. String.prototype.zf = function(len){return "0".string(len - this.length) + this;};
  235. Number.prototype.zf = function(len){return this.toString().zf(len);};