PageSourceSearch

https://nocutnews.co.kr/WebResource.axd?d=CoYCds3a48pxw4hdcWCV_H7t…oNjPPpqJZBmey03ilhXQQ1&t=639251474410812314

js nocutnews.co.kr collected 2026-10-01 10:15:04 UTC 17,653 bytes, 593 lines download raw bytes

1//<script type="text/javascript" src="enums.htm"></script>
2//<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.0.js"></script>
3//<script type="text/javascript">
4//<![CDATA[
5jQuery.extend({
6	"patterns": {
7		"id": /^[a-z0-9_]{5,20}$/,
8		"pwd": /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{6,14}$/,
9		"rrn": /^\d{6}-\d{7}$/,
10		"email": /^\w+(?:[-.]\w+)*@\w+(?:[-.]\w+)*\.[a-zA-Z]{2,5}$/i,
11		"date": /^(?:19|20)\d{2}[\-\/\.]+(?:0?\d|1[0-2])[\-\/\.]+(?:0?\d|[1-2]\d|3[0-1])(?:\s+(?:0?\d|1\d|2[0-3])(?::(?:0?\d|[1-5]\d)){0,2})?$/,
12		"time": /^(?:[01]?\d|2[0-4])(?::(?:[0-5]?\d)){0,2}$/,
13		"ssi": /^(?:s?html?|cgi|[aj]s[apchm]x?|exe|dll|php\d?|bat|com|[cj]s|vbs?|msi|sys|ocx|msc|cmd|axd|master|java|htw|exclude|cdx|cer|config|webinfo)$/i,
14		"xss": /<\/?(?:script|iframe)\s[^>]*>?|\son[cbfklmrsu][a-z]+\s*=/i,
15		"tag": /<\/?[a-z][^>]*>/gi,
16		"phone": /\+?\d+(?:-\d+)+(?:,d+)?/,
17		"url": /^(?:https?|ftps?|rtsp?):\/\/(?:[a-z\d-]+\.)+[a-z\d]{2,4}.*$/i
18	},
19	"unselectable": function () {
20		this.bind("selectstart.jq", function () { return false; })
21			.css({ "MozUserSelect": "none", "KhtmlUserSelect": "none" })
22			.get(0).unselectable = "on";
23	},
24	"selectable": function () {
25		this.unbind("selectstart.jq")
26			.css({ "MozUserSelect": "text", "KhtmlUserSelect": "text" })
27			.get(0).unselectable = "off";
28	},
29	"jsString": function (value) {
30		return value
31			.replace(/\\/g, "\\\\")
32			.replace(/\r/g, "\\r")
33			.replace(/\n/g, "\\n")
34			.replace(/\"/g, "\\\"");
35	},
36	"stringify": function (obj) {
37		var t = typeof obj;
38		if (t != "object" || obj === null) {
39			// simple data type
40			if (t == "string") obj = '"' + this.jsString(obj) + '"';
41			return String(obj);
42		} else {
43			// recurse array or object
44			var date;
45			var n, v, json = [], arr = obj && obj.constructor == Array;
46
47			if (obj.constructor === Date)
48				return "\"" + this.formatDateTime(obj, DateTimeFormat.JsShortDateTime) + "\"";
49
50			for (n in obj) {
51				v = obj[n];
52				t = typeof v;
53				date = v && v.constructor === Date;
54
55				//if (obj.hasOwnProperty(n)) {
56				if (t == "function") continue;
57				if (t == "string")
58					v = '"' + this.jsString(v) + '"';
59				else if (t == "object" && v !== null) {
60					if (date)
61						v = "\"" + this.formatDateTime(v, DateTimeFormat.JsShortDateTime) + "\"";
62					else
63						v = jQuery.stringify(v);
64				}
65				json.push((arr ? "" : '"' + n + '":') + String(v));
66			}
67			return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
68		}
69	},
70	// 정수로 변환
71	"parseInt": function (val) {
72		if (val === undefined || val == null) return 0;
73		if (typeof val == "boolean") return val ? 1 : 0;
74		if (val == "selected" || val == "checked") return 1;
75		if (isNaN(val) || val == "") return 0;
76		return parseInt(val, 10);
77	},
78	"parseTime": function (str) {
79		if (!$.patterns.time.test(str)) return null;
80		var val = str.split(":");
81		var rst = new Date();
82		rst.setHours(parseInt(val[0], 10));
83		if (val.length > 1) {
84			rst.setMinutes(parseInt(val[1], 10));
85			if (val.length == 3)
86				rst.setSeconds(parseInt(val[2], 10));
87		}
88		return rst;
89	},
90	// 날짜문자열을 데이트객체로 변환
91	"parseDate": function (str) {
92		var rst;
93		if ($.patterns.date.test(str)) {
94			var dtm = str.split(/\s+/);
95			dtm[0] = dtm[0].split(/[\-\/\.]+/);
96
97			rst = new Date(parseInt(dtm[0][0], 10), parseInt(dtm[0][1], 10) - 1, parseInt(dtm[0][2], 10));
98
99			if (dtm.length == 2) {
100				dtm[1] = dtm[1].split(":");
101				if (dtm[1].length >= 1) rst.setHours(parseInt(dtm[1][0], 10));
102				if (dtm[1].length >= 2) rst.setMinutes(parseInt(dtm[1][1], 10));
103				if (dtm[1].length == 3) rst.setSeconds(parseInt(dtm[1][2], 10));
104			}
105		} else
106			rst = null;
107		return rst;
108	},
109	// 부울 값으로 변환
110	"parseBool": function (value) {
111		var t = typeof value;
112		if (value === undefined || value === null) return false;
113		if (t === "boolean") return value;
114		if (t === "number") return value > 0;
115		if (t === "object" || t == "string" && !isNaN(value) && parseInt(value, 10) > 0) return true;
116
117		var rst = false;
118		switch (value.toLowerCase()) {
119			case "true":
120			case "yes":
121			case "checked":
122			case "selected":
123				rst = true;
124				break;
125		}
126		return rst;
127	},
128	// 팝업
129	"popup": function (url, name, scroll, w, h, l, t, status) {
130		var features = "fullscreen=0,toolbar=0,location=0,directories=0,menubar=0,resizable=0" +
131			",scrollbars=" + scroll +
132			",width=" + w + ",height=" + h +
133			",status=" + (status || 1);
134		if (l) features += ",left=" + l;
135		if (t) features += ",top=" + t;
136		return window.open(url, name, features);
137	},
138	// 개체 복사
139	"objectCopy": function (obj) {
140		if (obj === null || obj === undefined || typeof obj !== "object") return obj;
141		var clone = obj instanceof Array ? [] : {};
142		for (var i in obj) clone[i] = this.objectCopy(obj[i]);
143		return clone;
144	},
145	// 날짜 복사
146	"dateCopy": function (d) {
147		if (d == undefined || d == null) return null;
148		var rst = new Date(
149			d.getFullYear(), d.getMonth(), d.getDate(),
150			d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()
151		);
152		return rst;
153	},
154	// URL 개체
155	"url": {
156		"qstr": function (key, t) {
157			var str = location.href;
158			var index = str.indexOf("?") + 1;
159			var lastIndex = str.indexOf("#") > -1 ? str.indexOf("#") + 1 : str.length;
160
161			str = (index == 0) ? "" : str.substring(index, lastIndex);
162			str = str.replace(/#*$/, "");
163
164			if (!key) return str;
165			if (!t) t = "string";
166
167			str = str.split("&");
168
169			var rst;
170			switch (t.toLowerCase()) {
171				case "number":
172					rst = 0;
173					break;
174				case "bool":
175					rst = false;
176					break;
177				case "date":
178					rst = null;
179					break;
180				default:
181					rst = "";
182					break;
183			}
184			for (var i = 0; i < str.length; i++) {
185				str[i] = str[i].split("=");
186
187				if (str[i][0].toLowerCase() == key.toLowerCase()) {
188					rst = (str[i].length != 2 ? "" : str[i][1]);
189					switch (t.toLowerCase()) {
190						case "number":
191							rst = $.parseInt(rst);
192							break;
193						case "bool":
194							rst = $.parseBool(rst);
195							break;
196						case "date":
197							rst = $.parseDate(rst);
198							break;
199					}
200					break;
201				}
202			}
203			return rst;
204		},
205		// URL 인코딩
206		"enc": function (url) {
207			if (!url || url == "") return "";
208			rst = encodeURIComponent(url);
209			rst = rst.replace(/\./g, "%2e");
210			rst = rst.replace(/%2b/ig, "%252b");
211
212			return rst;
213		},
214		// URL 디코딩
215		"dec": function (url) {
216			var rst = url;
217			try {
218				rst = rst.replace(/%252b/ig, "%2b");
219				rst = decodeURIComponent(rst);
220			} catch (e) {
221				rst = unescape(rst);
222			}
223			return rst;
224		},
225		"parse": function (url) {
226			url = url || location.href;
227			const rst = new URL(url);
228			rst.pathAndQuery = rst.pathname + rst.search;
229			rst.filename = rst.pathname.substring(rst.pathname.lastIndexOf("/") + 1);
230			const ext = rst.filename.split(".");
231			rst.extension = ext.length > 1 ? `.${ext[ext.length - 1]}` : "";
232
233			return rst;
234		},
235		"host": function (url) { return this.parse(url).host; },
236		// 경로와 쿼리 문자열 반환
237		"pathAndQuery": function (url) { return this.parse(url).pathAndQuery; },
238		// 파일명 반환
239		"filename": function (url) { return this.parse(url).filename; },
240		// URL에서 확장자 반환
241		"ext": function (url) { return this.extension(url); },
242		"extension": function (url) { return this.parse(url).extension; },
243		// 페이지 인덱스(0부터 시작)를 가져옵니다.
244		"getPageIndex": function (key) { return this.pageIndex(key); },
245		"pageIndex": function (key) {
246			const rst = this.qstr(key, "number");
247			return Math.max(0, rst - 1);
248		}
249	},
250	// 날짜 포멧
251	"formatDateTime": function (dat, dtFormat) {
252		if (dat == null) return "";
253		if (!dtFormat) dtFormat = DateTimeFormat.JsShortDate;
254
255		var rst = "";
256		var week = ["일", "월", "화", "수", "목", "금", "토"];
257
258		switch (dtFormat) {
259			case DateTimeFormat.JsShortDate:
260				rst = dat.getFullYear() + "-" +
261					  this.formatNumber(dat.getMonth() + 1, 2) + "-" +
262					  this.formatNumber(dat.getDate(), 2);
263				break;
264			case DateTimeFormat.JsShortDateTime:
265				rst = this.formatDateTime(dat, DateTimeFormat.JsShortDate) +
266					" " + this.formatNumber(dat.getHours(), 2) +
267					":" + this.formatNumber(dat.getMinutes(), 2) +
268					":" + this.formatNumber(dat.getSeconds(), 2);
269				break;
270			case DateTimeFormat.JsLongDate:
271				rst = dat.getFullYear() + "년 " +
272					(dat.getMonth() + 1) + "월 " +
273					dat.getDate() + "일 " +
274					week[dat.getDay()] + "요일";
275				break;
276			case DateTimeFormat.JsLongDateTime:
277				rst = this.formatDateTime(dat, DateTimeFormat.JsLongDate) + " " +
278					this.formatDateTime(dat, DateTimeFormat.JsLongTime);
279				break;
280			case DateTimeFormat.JsShortTime:
281				rst = this.formatDateTime(dat, DateTimeFormat.JsHourMinute) + ":" +
282					this.formatNumber(dat.getSeconds(), 2);
283				break;
284			case DateTimeFormat.JsLongTime:
285				rst = (dat.getHours() > 12 ? "오후 " : "오전 ") +
286					(dat.getHours() % 12) + "시 " +
287					dat.getMinutes() + "분 " +
288					dat.getSeconds() + "초";
289				break;
290			case DateTimeFormat.JsHourMinute:
291				rst = this.formatNumber(dat.getHours(), 2) + ":" +
292					this.formatNumber(dat.getMinutes(), 2);
293				break;
294			case DateTimeFormat.JsMonthDate:
295				rst = this.formatNumber(dat.getMonth() + 1, 2) + "/" +
296					this.formatNumber(dat.getDate(), 2);
297				break;
298			case DateTimeFormat.JsShortYear:
299				rst = dat.getFullYear() + "/" +
300					this.formatDateTime(dat, DateTimeFormat.JsMonthDate) + " " +
301					this.formatDateTime(dat, DateTimeFormat.JsHourMinute);
302				break;
303		}
304		return rst;
305	},
306	// 숫자 콤마 추가
307	"addComma": function (num) {
308		return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
309	},
310	// 숫자 포멧
311	"formatNumber": function (num, len) {
312		var rst = ""
313		if (len === undefined) {
314			var txtNumber = num.toString();
315			var rxSplit = new RegExp("([0-9])([0-9]{3}[,\.])");
316			var arrNumber = txtNumber.split(".");
317
318			arrNumber[0] += ".";
319			do {
320				arrNumber[0] = arrNumber[0].replace(rxSplit, "$1,$2");
321			} while (rxSplit.test(arrNumber[0]));
322
323			rst = arrNumber.length > 1 ? arrNumber.join("") : arrNumber[0].split(".")[0];
324		} else {
325			rst = num.toString();
326			for (var i = 0; i < len; i++) rst = "0" + rst;
327			rst = rst.substring(rst.length - len, rst.length);
328		}
329		return rst;
330	},
331	// 문자열 자르기
332	"cutString": function (str, len) {
333		if (str == "" || str == null) return "";
334		return this.len(str) > len ? this.left(str, len) + ".." : str;
335	},
336	// 문자열 길이
337	"len": function (str) {
338		var ch, len = 0;
339		for (var i = 0; i < str.length; i++)
340			str.charCodeAt(i) > 1000 ? len += 2 : len++;
341		return len;
342	},
343	// 왼쪽 문자열 반환
344	"left": function (str, len) {
345		if (str == null) return "";
346
347		var k = 0, rst = "";
348		for (var i = 0; i < str.length; i++) {
349			str.charCodeAt(i) > 1000 ? k += 2 : k++;
350			if (k > len) break;
351			rst += str.charAt(i);
352		}
353		return rst;
354	},
355	// 오른쪽 문자열 반환
356	"right": function (str, len) {
357		if (!str) return "";
358		return str.substring(str.length - len);
359	},
360	// 쿠키 개체
361	"cookie": {
362		// 쿠키 반환
363		"get": function (name) {
364			var nameOfCookie = name + "=";
365			var x = 0;
366
367			while (x <= document.cookie.length) {
368				var y = (x + nameOfCookie.length);
369
370				if (document.cookie.substring(x, y) == nameOfCookie) {
371					if ((endOfCookie = document.cookie.indexOf(";", y)) == -1)
372						endOfCookie = document.cookie.length;
373					return unescape(document.cookie.substring(y, endOfCookie));
374				}
375				x = document.cookie.indexOf(" ", x) + 1;
376				if (x == 0) break;
377			}
378			return "";
379		},
380		// 쿠키 저장
381		"set": function (name, value, expiredays) {
382			var todayDate = new Date();
383			todayDate.setDate(todayDate.getDate() + expiredays);
384			document.cookie = name + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";";
385		}
386	},
387	// 유효성 검사
388	"validator": {
389		// 아이디
390		"id": function (val) {
391			return $.patterns.id.test(val);
392		},
393		// 패스워드
394		"pwd": function (val) {
395			return $.patterns.pwd.test(val);
396		},
397		// 유효 이메일 체크
398		"email": function (email) {
399			return $.patterns.email.test(email);
400		},
401		// 이미지 여부 반환
402		"image": function (url) {
403			var ext = $.url.ext(url).toLowerCase();
404			var ret;
405
406			switch (ext) {
407				case "jpg":
408				case "gif":
409				case "png":
410					ret = true;
411					break;
412				default:
413					ret = false;
414			}
415			return ret;
416		},
417		// URL 체크
418		"url": function (value) {
419			return $.patterns.url.test(value);
420		},
421		// 전화번호
422		"phone": function (value) {
423			return $.patterns.phone.test(value);
424		}
425	},
426	// 키프레스 이벤트 핸들러
427	"keypressHandlers": {
428		//숫자
429		"number": function (e) {
430			var keyCode = Math.max(e.which, e.keyCode);
431			var availCharPattern = /\d/;
432			var ch = String.fromCharCode(keyCode);
433			return availCharPattern.test(ch) || this.isControlKey(keyCode);
434		},
435		// 전자 메일 주소
436		"email": function (e) {
437			var keyCode = Math.max(e.which, e.keyCode);
438			var availCharPattern = /[-\w\.@]/i;
439			var ch = String.fromCharCode(keyCode);
440			return availCharPattern.test(ch) || this.isControlKey(keyCode);
441		},
442		// 전자 메일 주소 이름
443		"emailUserName": function (e) {
444			var keyCode = Math.max(e.which, e.keyCode);
445			var availCharPattern = /[\w-\.]/i;
446			var ch = String.fromCharCode(keyCode);
447			return availCharPattern.test(ch) || this.isControlKey(keyCode);
448		},
449		// 전자 메일 주소 도메인
450		"emailDomain": function (e) {
451			var keyCode = Math.max(e.which, e.keyCode);
452			var availCharPattern = /[a-z\d-\.]/i;
453			var ch = String.fromCharCode(keyCode);
454			return availCharPattern.test(ch) || this.isControlKey(keyCode);
455		},
456		// 휴대폰, 전화번호
457		"phone": function (e) {
458			var keyCode = Math.max(e.which, e.keyCode);
459			var availCharPattern = /[\d-,\+]/;
460			var ch = String.fromCharCode(keyCode);
461			return availCharPattern.test(ch) || this.isControlKey(keyCode);
462		},
463		// 제어키 여부를 나타내는 값을 반환합니다.
464		"isControlKey": function (keyCode) {
465			return keyCode == 8 ||	// Backspace
466				keyCode == 9 ||		// Tab
467				keyCode == 13 ||	// Enter
468				keyCode == 35 ||	// End
469				keyCode == 36 ||	// Home
470				keyCode == 37 ||	// ←
471				keyCode == 39 ||	// →
472				keyCode == 46;		// Del
473		}
474	},
475	"html": {
476		// HTML 인코딩
477		"enc": function (str) {
478			var r;
479			r = str.replace(/&/g, "&amp;");
480			r = r.replace(/"/g, "&quot;");
481			r = r.replace(/</g, "&lt;");
482			r = r.replace(/>/g, "&gt;");
483
484			return r;
485		},
486		// 이미지
487		"img": function (src, alt, w, h, css) {
488			var rst = null;
489			if (src === undefined || src === null || src.length == 0) return rst;
490
491			alt = alt || "";
492			rst = $(document.createElement("img"))
493				.attr({ "src": src, "alt": alt, "title": alt });
494			if (w) rst.width(w + "px");
495			if (h) rst.height(h + "px");
496			if (css) rst.addClass(css);
497
498			return rst;
499		},
500		// 링크 이미지
501		"linkedImage": function (attr) {
502			var a = $(document.createElement("a"));
503
504			if (attr.href) a.attr("href", attr.href);
505			if (attr.className) a.addClass(attr.className);
506			if (attr.title) a.attr("title", attr.title);
507			if (attr.target) a.attr("target", attr.target);
508			if (attr.onclick) a.click(attr.onclick);
509
510			var img = $(document.createElement("img"));
511			if (attr.title) img.attr("alt", attr.title);
512			if (attr.src) img.attr("src", attr.src);
513			a.append(img);
514			return a;
515		},
516		// 줄바꿈 태그(<br />)
517		"newLineTag": function (text) {
518			var rst = text.replace(/\r\n/g, "<br />");
519			rst = text.replace(/\n/g, "<br />");
520			return rst;
521		}
522	},
523	"check_key": {
524		// 숫자
525		"number": function (str) {
526			var rst = false;
527			var regNumber = /^[0-9]*$/;
528			return rst;
529		},
530		// 한글
531		"korean": function (e) {
532			var charASCII = e.keyCode;
533			var rst = false;
534			if ((charASCII >= 12592) || (charASCII <= 12687))
535				rst = true;
536			return rst;
537		},
538		// 영문
539		"english": function (e) {
540			var charASCII = e.keyCode;
541			var rst = false;
542			if ((charASCII>=65 && charASCII<=90) || (charASCII>=97 && charASCII<=122))
543				rst = true;
544			return rst;
545		},
546		// 영문 대문자 
547		"englishUpper": function (e) {
548			var charASCII = e.keyCode;
549			var rst = false;
550			if (charASCII>=65 && charASCII<=90)
551				rst = true;
552			return rst;
553		},
554		// 영문 소문자
555		"englishLower": function (e) {
556			var charASCII = e.keyCode;
557			var rst = false;
558			if (charASCII>=97 && charASCII<=122)
559				rst = true;
560			return rst;
561		},
562		// 아이디 (숫자, 영문소, _ )
563		"id": function (str) {
564			console.log(str);
565			var rst = false;
566			// 숫자
567			var regNumber = /^[0-9]*$/;
568			if (regNumber.test(str)) rst = true;
569
570			// 영문소
571			var regLower = /^[a-z]/g;
572			if (regLower.test(str)) rst = true;
573			
574			// _
575			var regUnder = /^[_]/g;
576			if (regUnder.test(str)) rst = true;
577			
578			return rst;
579		},
580		// 특수기호 95 _
581		"special": function (e) {
582			var charASCII = e.keyCode;
583			var rst = false;
584			if ((charASCII >= 33 && charASCII <= 47) || (charASCII >= 58 && charASCII <= 64)
585					|| (charASCII>=91 && charASCII<=96) || (charASCII>=123 && charASCII<=126))
586				rst = true;
587			return rst;
588		}
589	}
590});
591
592//]]>
593//</script>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.