Format.js 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234
  1. function Format (heControlId, strFormatData, strMaxLength)
  2. {
  3. this.m_heControl = heControlId;
  4. this.m_strFormat; //format에 대한 정보를 format 멤버변수에 넣는다.
  5. this.m_nLength;
  6. this.m_bExistFormat = true; //(true)format 존재하고 format형태가 양호할때
  7. this.m_bIsEmptyFormatted =false;
  8. this.m_bExistMoneyUnitFormat = false; //고정길이의 fromat이 아닌 #으로 구성된 format에 대한 설정
  9. this.m_nMoneyUnitFormatPattern = 0;
  10. this.m_strInputRealityData; //구분자를 뺀 입력된 실제 DATA
  11. this.m_strInputMaskData;
  12. this.m_bValidformat;
  13. this.m_nCaretStart;
  14. this.m_nCaretEnd;
  15. this.m_nMaxLength = "-1" == strMaxLength ? 2147483647 : Number(strMaxLength);
  16. this.m_bIsMaxLength = "-1" == strMaxLength ? false : true;
  17. //날짜 format입력시 달을 기억하여 계산할때 사용할 변수 선언
  18. this.m_strFormatYear;
  19. this.m_FormatManth;
  20. //(.000)에 관련된 정보
  21. this.m_strDotZero = "";
  22. this.m_bDeleteZero = false;
  23. this.init(strFormatData);
  24. };
  25. /**
  26. * format을 초기화 한다.
  27. * @param strFormatData
  28. * @return
  29. */
  30. Format.prototype.init = function (strFormatData)
  31. {
  32. this.m_strFormat = strFormatData; //format에 대한 정보를 format 멤버변수에 넣는다.
  33. this.m_nLength = this.m_strFormat.length;
  34. if (0 == this.m_nLength)
  35. {
  36. this.m_bExistFormat = false;
  37. if (null == this.m_heControl.style.imeMode || "" == this.m_heControl.style.imeMode)
  38. {
  39. this.m_heControl.style.imeMode = "auto"; //모든 문자입력가능
  40. }
  41. this.m_heControl.maxLength = this.m_nMaxLength;
  42. return;
  43. }
  44. else
  45. {
  46. this.m_bExistFormat = true;
  47. this.m_strInputRealityData = ""; //초기화
  48. this.m_heControl.style.imeMode = "disabled"; //영문 or 숫자만 입력가능
  49. if ("-1" == this.m_strFormat.indexOf("#") && "-1" == this.m_strFormat.indexOf("0"))
  50. {
  51. this.m_bExistMoneyUnitFormat = false;// 화폐와 관련없는 format 일때
  52. this.m_bIsEmptyFormatted = true;
  53. this.m_heControl.maxLength = this.m_strFormat.length;
  54. this.inputValidateCheck();
  55. }
  56. else
  57. {
  58. this.m_bExistMoneyUnitFormat = true; // 화폐와 관련된 format 일때
  59. this.m_heControl.maxLength = this.m_nMaxLength;
  60. var nPoint = this.m_strFormat.indexOf(".");
  61. this.m_nMoneyUnitFormatPattern = "-1" != this.m_strFormat.indexOf(",") ? 1: 0;
  62. this.m_nMoneyUnitFormatPattern = "-1" != nPoint ? (this.m_nMoneyUnitFormatPattern + 2): this.m_nMoneyUnitFormatPattern;
  63. if (-1 != nPoint)
  64. {
  65. this.m_strDotZero = "";
  66. while("0" == this.m_strFormat.charAt((nPoint + 1)))
  67. {
  68. this.m_strDotZero += "0";
  69. nPoint++;
  70. }
  71. }
  72. this.m_bSubtractionKey = -1 != this.m_strFormat.indexOf("(-)") && -1 != this.m_heControl.value.indexOf("-") ? true : false;
  73. this.inputMoneyUnitValidateCheck();
  74. }
  75. }
  76. };
  77. Format.prototype.stopKeyEvent = function (event)
  78. {
  79. if (is_ie)
  80. {
  81. event.m_browserEvent.returnValue = false;
  82. }
  83. else
  84. {
  85. event.m_browserEvent.preventDefault();
  86. }
  87. };
  88. Format.prototype.moneyKeyCheck = function (event)
  89. {
  90. if (is_firefox)
  91. {//keyPress 상태에서 firefox는 숫자 입력키에 관련된 코드가 charCode로 값이 들어와서 처리함
  92. event.keyCode = event.m_browserEvent.keyCode > event.m_browserEvent.charCode ? event.m_browserEvent.keyCode : event.m_browserEvent.charCode;
  93. }
  94. if (8 == event.keyCode || 46 == event.keyCode || (48 <= event.keyCode && 57 >= event.keyCode) || (48 <= event.keyCode && 57 >= event.keyCode))
  95. {
  96. if (46 == event.keyCode)
  97. {
  98. if (-1 != this.m_heControl.value.indexOf("."))
  99. {//dot이 존재할때 다시 입력을 방지함
  100. this.stopKeyEvent(event);
  101. var objCaretPosition = getCaretPosition(this.m_heControl);
  102. if (this.m_heControl.value.indexOf(".") == objCaretPosition.start)
  103. {
  104. setCaretPosition(this.m_heControl, objCaretPosition.start + 1, objCaretPosition.start + 1);
  105. }
  106. }
  107. }
  108. }
  109. else if (45 == event.keyCode)
  110. {
  111. this.m_bSubtractionKey = false;
  112. if (!this.m_bSubtraction)
  113. {
  114. this.stopKeyEvent(event);
  115. }
  116. else
  117. {
  118. if (-1 != this.m_heControl.value.indexOf("-"))
  119. {
  120. this.stopKeyEvent(event);
  121. }
  122. this.m_bSubtractionKey = true;
  123. }
  124. }
  125. else
  126. {
  127. this.stopKeyEvent(event);
  128. }
  129. };
  130. Format.prototype.SpecialKeyCheck = function (event)
  131. {
  132. if (is_ie)
  133. {
  134. this.m_bIsSpecialKey = "onkeydown" == event.name ? true : false;
  135. }
  136. else if (is_firefox || is_chrome || is_safari)
  137. {
  138. this.m_bIsSpecialKey = event.m_browserEvent.charCode > 0 ? false : true;
  139. }
  140. else
  141. {
  142. this.m_bIsSpecialKey = event.m_browserEvent.which > 0 ? false : true;
  143. }
  144. };
  145. Format.prototype.keypressFormatting = function (event)
  146. {
  147. if (is_firefox)
  148. {
  149. event.keyCode = event.m_browserEvent.keyCode > event.m_browserEvent.charCode ? event.m_browserEvent.keyCode : event.m_browserEvent.charCode;
  150. }
  151. if ((37 == event.keyCode || 39 ==event.keyCode) && this.m_bIsSpecialKey)
  152. {//방향키를 눌렀을 때 return 한다.
  153. return;
  154. }
  155. // format 이 존재할 때
  156. if (this.m_bExistFormat)
  157. {
  158. //input 안의 값을 가져온다
  159. var strInputString = this.m_heControl.value;
  160. //input 의 길이를 측정한다.
  161. var nInputStringLength = strInputString.length;
  162. //input 의 케럿의 위치를 가져온다.
  163. var objCaretPosition = getCaretPosition(this.m_heControl);
  164. this.m_nCaretStart = objCaretPosition.start;
  165. this.m_nCaretEnd = objCaretPosition.end;
  166. //select가 되었는지 판단하는 변수
  167. var bIsSelected = this.m_nCaretStart != this.m_nCaretEnd ? true : false;
  168. //input 의 케럿의 위치를 기준으로 앞부분의 문자열을 구한다.
  169. var strFirstString = "";
  170. //input 의 케럿의 위치를 기준으로 특수문자를 제외한 문자열을 구한다.
  171. var strLastString = "";
  172. if ((event.keyCode >= 47 && event.keyCode <= 122) || event.keyCode > 185 || event.keyCode == 32 || event.keyCode == 45 ||
  173. 8 == event.keyCode || 46 == event.keyCode) // 입력되는 값이 있는 키만 허용
  174. {
  175. var nFormatCaret = 0;
  176. if (8 == event.keyCode)
  177. {
  178. if (bIsSelected)
  179. {
  180. this.stopKeyEvent(event);
  181. strFirstString = strInputString.substring(0, this.m_nCaretStart);
  182. strLastString = strInputString.substring(this.m_nCaretEnd, nInputStringLength).replace(/\W/g,"");
  183. }
  184. else
  185. {
  186. if ("9" != this.m_strFormat.charAt(this.m_nCaretStart - 1) && "y" != this.m_strFormat.charAt(this.m_nCaretStart - 1) &&
  187. "m" != this.m_strFormat.charAt(this.m_nCaretStart - 1) && "d" != this.m_strFormat.charAt(this.m_nCaretStart - 1) &&
  188. "h" != this.m_strFormat.charAt(this.m_nCaretStart - 1) && "n" != this.m_strFormat.charAt(this.m_nCaretStart - 1) &&
  189. "s" != this.m_strFormat.charAt(this.m_nCaretStart - 1) && "A" != this.m_strFormat.charAt(this.m_nCaretStart - 1) &&
  190. "a" != this.m_strFormat.charAt(this.m_nCaretStart - 1) && "C" != this.m_strFormat.charAt(this.m_nCaretStart - 1) &&
  191. "L" != this.m_strFormat.charAt(this.m_nCaretStart - 1))
  192. {
  193. this.m_nCaretStart--;
  194. }
  195. this.stopKeyEvent(event);
  196. nFormatCaret--;
  197. strFirstString = strInputString.substring(0, this.m_nCaretStart - 1);
  198. strLastString = strInputString.substring(this.m_nCaretStart, nInputStringLength).replace(/\W/g,"");
  199. }
  200. }
  201. else if (46 == event.keyCode && this.m_bIsSpecialKey)
  202. {
  203. if (bIsSelected)
  204. {
  205. this.stopKeyEvent(event);
  206. strFirstString = strInputString.substring(0, this.m_nCaretStart);
  207. strLastString = strInputString.substring(this.m_nCaretEnd, nInputStringLength).replace(/\W/g,"");
  208. }
  209. else
  210. {
  211. var nDeleteCaret = 0;
  212. if ("9" != this.m_strFormat.charAt(this.m_nCaretStart) && "y" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  213. "m" != this.m_strFormat.charAt(this.m_nCaretStart) && "d" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  214. "h" != this.m_strFormat.charAt(this.m_nCaretStart) && "n" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  215. "s" != this.m_strFormat.charAt(this.m_nCaretStart) && "A" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  216. "a" != this.m_strFormat.charAt(this.m_nCaretStart) && "C" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  217. "L" != this.m_strFormat.charAt(this.m_nCaretStart))
  218. {
  219. nDeleteCaret++;
  220. }
  221. this.stopKeyEvent(event);
  222. strFirstString = strInputString.substring(0, this.m_nCaretStart);
  223. strLastString = strInputString.substring(this.m_nCaretStart + nDeleteCaret + 1 , nInputStringLength).replace(/\W/g,"");
  224. }
  225. }
  226. else
  227. {
  228. strFirstString = strInputString.substring(0, this.m_nCaretStart);
  229. strLastString = strInputString.substring(this.m_nCaretEnd, nInputStringLength).replace(/\W/g,"");
  230. //입력된 값에 대한 format과의 비교
  231. var bIsNotKeyFormat = true;
  232. if ("9" != this.m_strFormat.charAt(this.m_nCaretStart) && "y" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  233. "m" != this.m_strFormat.charAt(this.m_nCaretStart) && "d" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  234. "h" != this.m_strFormat.charAt(this.m_nCaretStart) && "n" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  235. "s" != this.m_strFormat.charAt(this.m_nCaretStart) && "A" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  236. "a" != this.m_strFormat.charAt(this.m_nCaretStart) && "C" != this.m_strFormat.charAt(this.m_nCaretStart) &&
  237. "L" != this.m_strFormat.charAt(this.m_nCaretStart))
  238. {
  239. if (this.m_strFormat.charAt(this.m_nCaretStart) == String.fromCharCode(event.keyCode))
  240. {
  241. bIsNotKeyFormat = false;
  242. strFirstString += this.m_strFormat.charAt(this.m_nCaretStart);
  243. }
  244. else
  245. {
  246. strFirstString += this.m_strFormat.charAt(this.m_nCaretStart);
  247. this.m_nCaretStart++;
  248. }
  249. }
  250. var strValue = this.validateFormat(this.m_nCaretStart,String.fromCharCode(event.keyCode),event);
  251. if ("" == strValue && bIsNotKeyFormat)
  252. {
  253. this.stopKeyEvent(event);
  254. return;
  255. }
  256. this.stopKeyEvent(event);
  257. strFirstString += strValue;
  258. this.m_nCaretStart++;
  259. }
  260. // 기존의 값이 존재했을 때의 처리
  261. //뒤에 사용할 문자열의 위치를 지정한다.
  262. var nLastStringCaret = 0;
  263. //구간구간의 임시 문자열을 저장한다.
  264. var strTempData = "";
  265. for (var i = this.m_nCaretStart + nFormatCaret; i<this.m_nLength; i++)
  266. {
  267. if ("9" != this.m_strFormat.charAt(i) && "y" != this.m_strFormat.charAt(i) &&
  268. "m" != this.m_strFormat.charAt(i) && "d" != this.m_strFormat.charAt(i) &&
  269. "h" != this.m_strFormat.charAt(i) && "n" != this.m_strFormat.charAt(i) &&
  270. "s" != this.m_strFormat.charAt(i) && "A" != this.m_strFormat.charAt(i) &&
  271. "a" != this.m_strFormat.charAt(i) && "C" != this.m_strFormat.charAt(i) &&
  272. "L" != this.m_strFormat.charAt(i))
  273. {
  274. strTempData += this.m_strFormat.charAt(i);
  275. }
  276. else
  277. {
  278. if ("" != strLastString.charAt(nLastStringCaret))
  279. {
  280. var strCheckValue = this.validateFormat(i, strLastString.charAt(nLastStringCaret), event);
  281. if ("" != strCheckValue)
  282. {
  283. strTempData += strCheckValue;
  284. strFirstString += strTempData;
  285. nLastStringCaret++;
  286. strTempData = "";
  287. }
  288. else
  289. {
  290. break;
  291. }
  292. }
  293. else
  294. {
  295. break;
  296. }
  297. }
  298. }
  299. //케럿위치 조정
  300. var bDayFormatCheck = this.dayFormatCheck(strFirstString);
  301. if (bDayFormatCheck || 8 == event.keyCode || 46 == event.keyCode)
  302. {
  303. this.m_heControl.value = strFirstString;
  304. setCaretPosition(this.m_heControl, this.m_nCaretStart, this.m_nCaretStart);
  305. }
  306. }
  307. else
  308. {
  309. this.stopKeyEvent(event);
  310. return;
  311. }
  312. }
  313. };
  314. Format.prototype.keyupFormatting = function (event)
  315. {
  316. if (event.shiftKey && this.m_bIsSpecialKey && (37 == event.keyCode || 39==event.keyCode))
  317. {
  318. return;
  319. }
  320. if (this.m_bExistFormat)
  321. {
  322. var objCaretPosition = getCaretPosition(this.m_heControl);
  323. this.m_nCaretStart = objCaretPosition.start;
  324. this.m_nCaretEnd = objCaretPosition.end;
  325. var nInputStringLength = this.m_heControl.value.length;
  326. if ((event.keyCode >= 48 && event.keyCode <= 122) || event.keyCode > 185 || event.keyCode == 32) // 입력되는 값이 있는 키만 허용
  327. {
  328. if (0 == this.m_nCaretStart && nInputStringLength == this.m_nCaretEnd) //전체 select 상태일 때
  329. {
  330. nInputStringLength = 0;
  331. this.m_heControl.value = "";
  332. }
  333. if (this.m_bExistMoneyUnitFormat && this.m_bExistFormat) //고정길이의 format 이 아닐때
  334. {
  335. this.inputMoneyUnitValidateCheck();
  336. }
  337. else if (this.m_bExistFormat && nInputStringLength > 0 && (nInputStringLength -1) <= this.m_nLength )
  338. {
  339. var strInputSaveData = this.m_heControl.value.substring (0, nInputStringLength - 1);
  340. for (var i=0 ; i < this.m_strInputMaskData.length ; i++)
  341. {
  342. if (this.m_heControl.value.charAt(i) != this.m_strInputMaskData.charAt(i))
  343. {
  344. this.inputValidateCheck();
  345. setCaretPosition(this.m_heControl, this.m_nCaretStart, this.m_nCaretStart);
  346. return;
  347. }
  348. }
  349. if (this.m_heControl.value == this.m_strInputMaskData && nInputStringLength == this.m_nCaretStart)
  350. {
  351. setCaretPosition(this.m_heControl,this.m_nCaretStart, this.m_nCaretStart);
  352. return;
  353. }
  354. if ("9" != this.m_strFormat.charAt(nInputStringLength - 1) && "y" != this.m_strFormat.charAt(nInputStringLength - 1) &&
  355. "m" != this.m_strFormat.charAt(nInputStringLength - 1) && "d" != this.m_strFormat.charAt(nInputStringLength - 1) &&
  356. "h" != this.m_strFormat.charAt(nInputStringLength - 1) && "n" != this.m_strFormat.charAt(nInputStringLength - 1) &&
  357. "s" != this.m_strFormat.charAt(nInputStringLength - 1) && "A" != this.m_strFormat.charAt(nInputStringLength - 1) &&
  358. "a" != this.m_strFormat.charAt(nInputStringLength - 1) && "C" != this.m_strFormat.charAt(nInputStringLength - 1) &&
  359. "L" != this.m_strFormat.charAt(nInputStringLength - 1))
  360. {
  361. this.m_heControl.value = strInputSaveData + this.m_strFormat.charAt(nInputStringLength -1);
  362. if ("" != this.m_strFormat.charAt(nInputStringLength))
  363. {
  364. if ("A" == this.m_strFormat.charAt(nInputStringLength - 1) || "a" == this.m_strFormat.charAt(nInputStringLength - 1) ||
  365. "C" == this.m_strFormat.charAt(nInputStringLength - 1) || "L" == this.m_strFormat.charAt(nInputStringLength - 1))
  366. { // 입력 format 정보가 문자일 때
  367. var strTempData = this.validateFormat (nInputStringLength, this.m_heControl.value.charAt(nInputStringLength - 1), event);
  368. }
  369. else
  370. { //입력 format 정보가 숫자일 때
  371. var strTempData = this.validateFormat (nInputStringLength, "", event);
  372. }
  373. if ("" == strTempData && 1 == this.m_heControl.value.length)// format에 첫번째 문자가 특수문자일때 처리
  374. {
  375. this.m_heControl.value = "";
  376. return;
  377. }
  378. this.m_heControl.value = this.m_heControl.value + strTempData;
  379. this.inputValidateCheck();
  380. if (this.m_heControl.value.length == this.m_nLength)
  381. {
  382. this.m_heControl.blur();
  383. }
  384. }
  385. }
  386. else
  387. {
  388. if ("A" == this.m_strFormat.charAt(nInputStringLength - 1) || "a" == this.m_strFormat.charAt(nInputStringLength - 1) ||
  389. "C" == this.m_strFormat.charAt(nInputStringLength - 1) || "L" == this.m_strFormat.charAt(nInputStringLength - 1))
  390. { // 입력 format 정보가 문자일 때
  391. var strTempData = this.validateFormat (nInputStringLength - 1, this.m_heControl.value.charAt(nInputStringLength - 1), event);
  392. }
  393. else
  394. { //입력 format 정보가 숫자일 때
  395. var strTempData = this.validateFormat (nInputStringLength - 1, "", event);
  396. }
  397. var nTempDataLength = strTempData.length - 1; // 값체크 후 값이 2개이상있을때
  398. if ("9" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) && "y" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) &&
  399. "m" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) && "d" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) &&
  400. "h" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) && "n" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) &&
  401. "s" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) && "A" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) &&
  402. "a" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) && "C" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) &&
  403. "L" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) && "" != this.m_strFormat.charAt(nInputStringLength + nTempDataLength) &&
  404. "" != strTempData) // 특수문자 처리
  405. {
  406. strTempData = strTempData + this.m_strFormat.charAt(nInputStringLength);
  407. if (this.m_nCaretStart == nInputStringLength)
  408. {
  409. this.m_nCaretStart++;
  410. }
  411. }
  412. this.m_heControl.value = strInputSaveData + strTempData;
  413. this.inputValidateCheck();
  414. if (this.m_heControl.value.length == this.m_nLength)
  415. {
  416. this.m_heControl.blur();
  417. }
  418. }
  419. }
  420. }
  421. else if (8 == event.keyCode) // 특수문자를 backspace 했을 때
  422. {
  423. if (!this.m_bExistMoneyUnitFormat) //고정길이의 format 이 아닐때
  424. {
  425. var bInputTextLastPoint = true; //커서의 위치가 맨 마지막에 존재할 때
  426. var reSpecialChar = /\W|\s/g;
  427. for (var i=0 ; i < this.m_strInputMaskData.length ; i++)
  428. {
  429. if (0 == nInputStringLength)
  430. {
  431. bInputTextLastPoint = false;
  432. this.m_strInputMaskData = "";
  433. this.m_strInputRealityData = "";
  434. return;
  435. }
  436. if (this.m_heControl.value.charAt(i) != this.m_strInputMaskData.charAt(i))
  437. {
  438. if ("" != this.m_heControl.value.charAt(i+1))
  439. {
  440. bInputTextLastPoint = false;
  441. this.m_strInputMaskData = this.m_heControl.value;
  442. break;
  443. }
  444. }
  445. }
  446. if ("9" != this.m_strFormat.charAt(nInputStringLength) && "y" != this.m_strFormat.charAt(nInputStringLength) &&
  447. "m" != this.m_strFormat.charAt(nInputStringLength) && "d" != this.m_strFormat.charAt(nInputStringLength) &&
  448. "h" != this.m_strFormat.charAt(nInputStringLength) && "n" != this.m_strFormat.charAt(nInputStringLength) &&
  449. "s" != this.m_strFormat.charAt(nInputStringLength) && "A" != this.m_strFormat.charAt(nInputStringLength) &&
  450. "a" != this.m_strFormat.charAt(nInputStringLength) && "C" != this.m_strFormat.charAt(nInputStringLength) &&
  451. "L" != this.m_strFormat.charAt(nInputStringLength) && bInputTextLastPoint)
  452. {
  453. var strInputSaveData = this.m_heControl.value.substring (0, nInputStringLength - 1);
  454. this.m_heControl.value = strInputSaveData;
  455. this.m_strInputMaskData = strInputSaveData;
  456. }
  457. if (1 == nInputStringLength)
  458. {
  459. var strTempData = this.m_heControl.value;
  460. this.m_heControl.value = strTempData.replace(reSpecialChar,"");
  461. this.m_strInputMaskData = this.m_heControl.value;
  462. }
  463. }
  464. else
  465. {
  466. this.inputMoneyUnitValidateCheck();
  467. }
  468. }
  469. else if (46 == event.keyCode)
  470. {
  471. if (!this.m_bExistMoneyUnitFormat) //고정길이의 format 이 아닐때
  472. {
  473. this.m_strInputMaskData = this.m_heControl.value;
  474. }
  475. else
  476. {
  477. this.inputMoneyUnitValidateCheck();
  478. }
  479. }
  480. else if (9 == event.keyCode) //tab키 이벤트가 들어올 때
  481. {
  482. setCaretPosition(this.m_heControl, this.m_nCaretStart, this.m_heControl.value.length);
  483. return;
  484. }
  485. setCaretPosition(this.m_heControl, this.m_nCaretStart, this.m_nCaretStart);
  486. }
  487. };
  488. Format.prototype.inputMoneyUnitValidateCheckPattern1 = function (strInputData, nInputDataLength)
  489. { // # 숫자만 존재할 때
  490. var strSaveData = ""; //초기화
  491. var bExistFirstZero = -1 != this.m_strFormat.indexOf("9#");
  492. var bExistSaveData = true;
  493. var bNumber = parseFloat(strInputData) > 0;
  494. nInputDataLength = strInputData.length;
  495. strInputData = strInputData.replace(/\W|\s|\D/g,""); //문자열에서 , 제외
  496. this.m_nCaretStart = this.m_nCaretStart - (nInputDataLength - strInputData.length);
  497. nInputDataLength = 0 == this.m_strDotZero.length ? strInputData.length : this.m_strDotZero.length;
  498. for (var i=0 ; i < nInputDataLength ; i++)
  499. {
  500. if (strInputData.charCodeAt(i) >= 48 && strInputData.charCodeAt(i) <= 57)
  501. {
  502. if (strInputData.charCodeAt(i) == 48 && !bExistFirstZero)
  503. {
  504. bExistFirstZero = false;
  505. }
  506. else
  507. {
  508. bExistFirstZero = true;
  509. }
  510. if (bExistFirstZero)
  511. {
  512. strSaveData = strSaveData + strInputData.charAt(i);
  513. this.m_strInputRealityData = this.m_strInputRealityData + strInputData.charAt(i);
  514. bExistSaveData = false;
  515. }
  516. if (bNumber && bExistSaveData && strInputData.charCodeAt(i) == 48)
  517. {
  518. this.m_strInputRealityData = this.m_strInputRealityData + strInputData.charAt(i);
  519. strSaveData += strInputData.charAt(i);
  520. }
  521. bExistSaveData = true;
  522. }
  523. }
  524. if ("keyUp" != m_event.name)
  525. {
  526. for (var i=0; i<this.m_strDotZero.length; i++)
  527. {
  528. if (strSaveData.length == this.m_strDotZero.length)
  529. {
  530. break;
  531. }
  532. if ("" == strSaveData.charAt(i))
  533. {
  534. // this.m_strInputRealityData = this.m_strInputRealityData + "0";
  535. strSaveData = strSaveData + "0";
  536. }
  537. }
  538. }
  539. return strSaveData;
  540. };
  541. Format.prototype.inputMoneyUnitValidateCheckPattern2 = function (strInputData, nInputDataLength)
  542. { // (# + ,) 화폐단위 format일때
  543. var strSaveData = ""; //초기화
  544. if (-1 != strInputData.indexOf("."))
  545. {
  546. strInputData = strInputData.split(/\./g)[0]; //소숫점이 존재한다면 뒷부분 내림
  547. strInputData = null == strInputData ? "" : strInputData;
  548. }
  549. nInputDataLength = strInputData.length;
  550. strInputData = strInputData.replace(/\W|\s|\D/g,""); //문자열에서 , 제외
  551. this.m_nCaretStart = this.m_nCaretStart - (nInputDataLength - strInputData.length);
  552. nInputDataLength = strInputData.length;
  553. var nCommaFirstPoint = nInputDataLength % 3;
  554. var nCommaLoopPoint = (nInputDataLength / 2) - 1 ;
  555. var nCommaFirstPrintCount = 0;
  556. var nCommaLoopPrintCount = 0;
  557. var bCommaLoopStarter = false;
  558. var bExistFirstZero = false;
  559. for (var i=0 ; i < nInputDataLength ; i++)
  560. {
  561. if (strInputData.charCodeAt(i) >= 48 && strInputData.charCodeAt(i) <= 57)
  562. {
  563. if (strInputData.charCodeAt(i) == 48 && !bExistFirstZero)
  564. {
  565. bExistFirstZero = false;
  566. }
  567. else
  568. {
  569. bExistFirstZero = true;
  570. }
  571. if (bExistFirstZero)
  572. {
  573. if (nCommaFirstPoint == nCommaFirstPrintCount)
  574. {
  575. if (nInputDataLength > 3 && nCommaFirstPoint != 0)
  576. {
  577. this.m_nCaretStart++;
  578. strSaveData = strSaveData + ",";
  579. bCommaLoopStarter = true;
  580. }
  581. else if (nInputDataLength > 3)
  582. {
  583. bCommaLoopStarter = true;
  584. }
  585. }
  586. if (3 == nCommaLoopPrintCount)
  587. {
  588. this.m_nCaretStart++;
  589. strSaveData = strSaveData + ",";
  590. nCommaLoopPrintCount = 0;
  591. }
  592. strSaveData = strSaveData + strInputData.charAt(i);
  593. this.m_strInputRealityData = this.m_strInputRealityData + strInputData.charAt(i);
  594. nCommaFirstPrintCount ++;
  595. if (bCommaLoopStarter)
  596. {
  597. nCommaLoopPrintCount++;
  598. }
  599. }
  600. if (1 == nInputDataLength && 0 == i && strInputData.charCodeAt(i) == 48)
  601. {
  602. this.m_strInputRealityData = strInputData.charAt(i);
  603. strSaveData = strInputData.charAt(i);
  604. }
  605. }
  606. }
  607. return strSaveData;
  608. };
  609. Format.prototype.inputMoneyUnitValidateCheckPattern3 = function (strInputData, nInputDataLength)
  610. {// (# + .) 소수점 단위일 때
  611. var strSaveData = ""; //초기화
  612. nInputDataLength = strInputData.length;
  613. strInputData = strInputData.replace(/\s|[^(\d|\.)]/g,""); //문자열에서 , 제외
  614. this.m_nCaretStart = this.m_nCaretStart - (nInputDataLength - strInputData.length);
  615. nInputDataLength = strInputData.length;
  616. var nCommaFirstPoint = nInputDataLength % 3;
  617. var nCommaLoopPoint = (nInputDataLength / 2) - 1 ;
  618. var nCommaFirstPrintCount = 0;
  619. var nCommaLoopPrintCount = 0;
  620. var bCommaLoopStarter = false;
  621. var bExistFirstZero = false;
  622. var bExistDot = true;
  623. for (var i=0 ; i < nInputDataLength ; i++)
  624. {
  625. if (((strInputData.charCodeAt(i) >= 48 && strInputData.charCodeAt(i) <= 57) || strInputData.charCodeAt(i) == 46) && bExistDot)
  626. {
  627. if (strInputData.charCodeAt(i) == 46)
  628. { // 첫번째 입력값이 .(dot) 일때
  629. if (0 ==i && !strInputData.charCodeAt(i + 1))
  630. {
  631. return "";
  632. }
  633. else if(0 ==i && strInputData.charCodeAt(i + 1))
  634. {
  635. this.m_strInputRealityData = this.m_heControl.value;
  636. return strInputData.substring(1 , nInputDataLength);
  637. }
  638. }
  639. if (strInputData.charCodeAt(i) == 48 && !bExistFirstZero)
  640. { //첫번째 값이 0일때 처리
  641. if (0 == i && !strInputData.charCodeAt(i + 1))
  642. {
  643. strSaveData = strSaveData + strInputData.charAt(i);
  644. this.m_strInputRealityData = this.m_strInputRealityData + strInputData.charAt(i);
  645. }
  646. if(strInputData.charCodeAt(i + 1) != 46)
  647. {
  648. bExistFirstZero = false;
  649. }
  650. else
  651. {
  652. bExistFirstZero = true;
  653. }
  654. }
  655. else
  656. {
  657. bExistFirstZero = true;
  658. }
  659. if (bExistFirstZero)
  660. {
  661. strSaveData = strSaveData + strInputData.charAt(i);
  662. this.m_strInputRealityData = this.m_strInputRealityData + strInputData.charAt(i);
  663. if (strInputData.charCodeAt(i) == 46)
  664. {
  665. bExistDot = false;
  666. if (-1 != this.m_strFormat.indexOf("0"))
  667. {
  668. for (var i = this.m_strFormat.indexOf("0") ; i < this.m_nLength ; i++)
  669. {
  670. if ("0" == this.m_strFormat.charAt(i))
  671. {
  672. strSaveData += "0";
  673. this.m_strInputRealityData += "0";
  674. }
  675. }
  676. return strSaveData;
  677. }
  678. }
  679. }
  680. }
  681. else if (strInputData.charCodeAt(i) >= 48 && strInputData.charCodeAt(i) <= 57)
  682. {
  683. strSaveData = strSaveData + strInputData.charAt(i);
  684. this.m_strInputRealityData = this.m_strInputRealityData + strInputData.charAt(i);
  685. }
  686. else if (strInputData.charCodeAt(i) == 46 && !bExistDot)
  687. {
  688. this.m_nCaretStart--;
  689. }
  690. }
  691. return strSaveData;
  692. };
  693. Format.prototype.inputMoneyUnitValidateCheck = function ()
  694. {
  695. var strSaveData = ""; //초기화
  696. this.m_strInputRealityData = ""; //초기화
  697. var strInputData = this.m_heControl.value;
  698. var nInputDataLength = this.m_heControl.value.length;
  699. //format (-) 형태 판단
  700. this.m_bSubtraction = -1 != this.m_strFormat.indexOf("(-)");
  701. // format 선행, 후행문자 처리
  702. var strFormatSubtraction = this.m_bSubtraction ? this.m_strFormat.replace("(-)","") : this.m_strFormat;
  703. var strTransData = strFormatSubtraction.replace(/(\#|\,|\.|0|9)+/g,"__");
  704. strTransData = "HEAD" + strTransData;
  705. var arData = strTransData.split(/\_\_/g);
  706. if (1 == arData.length)
  707. {
  708. if (-1 == arData[0].indexOf("HEAD"))
  709. {
  710. arData[1] = arData[0];
  711. arData[0] = "";
  712. }
  713. else
  714. {
  715. arData[0] = arData[0].replace(/HEAD/g,"");
  716. arData[1] = "";
  717. }
  718. }
  719. else
  720. {
  721. arData[0] = null != arData[0] ? arData[0].replace(/HEAD/g,"") : "";
  722. arData[1] = null != arData[1] ? arData[1] : "";
  723. }
  724. switch (this.m_nMoneyUnitFormatPattern)
  725. {
  726. case 0:
  727. {
  728. this.m_bIsEmptyFormatted = true;
  729. this.m_heControl.value = this.inputMoneyUnitValidateCheckPattern1 (strInputData, nInputDataLength);
  730. break;
  731. }
  732. case 1:
  733. {
  734. this.m_bIsEmptyFormatted = true;
  735. this.m_heControl.value = this.inputMoneyUnitValidateCheckPattern2 (strInputData, nInputDataLength);
  736. break;
  737. }
  738. case 2:
  739. {
  740. this.m_heControl.value = this.inputMoneyUnitValidateCheckPattern3 (strInputData, nInputDataLength);
  741. break;
  742. }
  743. case 3:
  744. { // 화폐 + 소수점 패턴일 경우
  745. if (-1 == strInputData.indexOf("."))
  746. {
  747. if ("onkeyup" == m_event.name && 0 != this.m_strDotZero.length && !this.m_bDeleteZero)
  748. {
  749. var nDotZeroPoint = 0;
  750. for (var i = strInputData.length - 1; i > -1 ; i--)
  751. {
  752. if (strInputData.charAt(i) == this.m_strDotZero.charAt(nDotZeroPoint))
  753. {
  754. nDotZeroPoint++;
  755. }
  756. else
  757. {
  758. break;
  759. }
  760. }
  761. strInputData = strInputData.substring(0, i + 1);
  762. nInputDataLength = strInputData.length;
  763. }
  764. this.m_bDeleteZero = false;
  765. this.m_bIsEmptyFormatted = false;
  766. this.m_heControl.value = this.inputMoneyUnitValidateCheckPattern2 (strInputData, nInputDataLength);
  767. if ("" != this.m_heControl.value)
  768. {
  769. if (0 == this.m_strDotZero.length)
  770. {
  771. this.m_heControl.value += ".0";
  772. }
  773. else
  774. {
  775. this.m_heControl.value += "." + this.m_strDotZero;
  776. }
  777. }
  778. }
  779. else
  780. {
  781. this.m_bIsEmptyFormatted = true;
  782. var nStrDotTokenPoint = strInputData.indexOf(".");
  783. strSaveData += this.inputMoneyUnitValidateCheckPattern2 (strInputData.substring(0, nStrDotTokenPoint), nStrDotTokenPoint);
  784. if ("" == strSaveData)
  785. {
  786. strSaveData += "0";
  787. }
  788. strSaveData += ".";
  789. this.m_strInputRealityData += ".";
  790. var strSaveData2 = this.inputMoneyUnitValidateCheckPattern1 (strInputData.substring(nStrDotTokenPoint + 1, nInputDataLength), nInputDataLength - nStrDotTokenPoint - 1);
  791. if (this.m_strDotZero == strSaveData2)
  792. {
  793. this.m_strInputRealityData = this.m_strInputRealityData.substring(0,this.m_strInputRealityData.length -1);
  794. }
  795. strSaveData += strSaveData2;
  796. this.m_heControl.value = strSaveData;
  797. }
  798. break;
  799. }
  800. }
  801. this.m_nCaretStart = this.m_nCaretStart + arData[0].length + arData[1].length;
  802. // format 형식 붙히기
  803. var strSubtraction = "";
  804. if (this.m_bSubtraction && this.m_bSubtractionKey)
  805. {
  806. if (-1 != strInputData.substring(0, arData[0].length + 1).indexOf("-"))
  807. {
  808. strSubtraction = "-";
  809. this.m_strInputRealityData = strSubtraction + this.m_strInputRealityData;
  810. if (this.m_nCaretStart > arData[0].length )
  811. {
  812. this.m_nCaretStart++;
  813. }
  814. else
  815. {
  816. this.m_nCaretStart = this.m_nCaretStart + arData[0].length + 1;
  817. }
  818. }
  819. }
  820. this.m_heControl.value = arData[0] + strSubtraction + this.m_heControl.value + arData[1];
  821. this.m_strInputMaskData = this.m_heControl.value;
  822. };
  823. Format.prototype.inputValidateCheck = function() //keydown 잘못 입력된 값 처리 && input된 초기값에 format 적용
  824. {
  825. var strSaveData = "";
  826. var strTempData = "";
  827. this.m_strInputRealityData = ""; //초기화
  828. this.m_strInputMaskData = ""; //초기화
  829. var nFormatSwtichPoint = 0;
  830. var nInputSwtichPoint = 0;
  831. var strInputData = this.m_heControl.value;
  832. var nChangeInputLength = strInputData.length;
  833. reSpecialChar = /\s/g;
  834. strInputData = strInputData.replace(reSpecialChar , "");
  835. this.m_nCaretStart = this.m_nCaretStart - (nChangeInputLength - strInputData.length);
  836. reSpecialChar = /\W/g;
  837. strInputData = strInputData.replace(reSpecialChar , "");
  838. for (var i=0 ; i < this.m_nLength ; i++)
  839. {
  840. if( nFormatSwtichPoint != this.m_nLength && "" != strInputData.charAt(nInputSwtichPoint))
  841. {
  842. if ("9" != this.m_strFormat.charAt(nFormatSwtichPoint) && "y" != this.m_strFormat.charAt(nFormatSwtichPoint) &&
  843. "m" != this.m_strFormat.charAt(nFormatSwtichPoint) && "d" != this.m_strFormat.charAt(nFormatSwtichPoint) &&
  844. "h" != this.m_strFormat.charAt(nFormatSwtichPoint) && "n" != this.m_strFormat.charAt(nFormatSwtichPoint) &&
  845. "s" != this.m_strFormat.charAt(nFormatSwtichPoint) && "A" != this.m_strFormat.charAt(nFormatSwtichPoint) &&
  846. "a" != this.m_strFormat.charAt(nFormatSwtichPoint) && "C" != this.m_strFormat.charAt(nFormatSwtichPoint) &&
  847. "L" != this.m_strFormat.charAt(nFormatSwtichPoint))
  848. {
  849. strSaveData = strSaveData + this.m_strFormat.charAt(nFormatSwtichPoint);
  850. nFormatSwtichPoint++;
  851. }
  852. else
  853. {
  854. for (;nInputSwtichPoint < strInputData.length; nInputSwtichPoint++)
  855. {
  856. strTempData = this.validateFormat (nFormatSwtichPoint, strInputData.charAt(nInputSwtichPoint));
  857. if ("" != strTempData)
  858. {
  859. strSaveData = strSaveData + strTempData;
  860. this.m_strInputRealityData = this.m_strInputRealityData + strTempData;
  861. nInputSwtichPoint++;
  862. if ("9" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) && "y" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) &&
  863. "m" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) && "d" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) &&
  864. "h" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) && "n" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) &&
  865. "s" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) && "A" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) &&
  866. "a" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) && "C" != this.m_strFormat.charAt(nFormatSwtichPoint + 1) &&
  867. "L" != this.m_strFormat.charAt(nFormatSwtichPoint + 1))
  868. {
  869. strSaveData = strSaveData + this.m_strFormat.charAt(nFormatSwtichPoint + 1);
  870. nFormatSwtichPoint++;
  871. if(this.m_nCaretStart == nFormatSwtichPoint ||
  872. this.m_nCaretStart == this.m_heControl.value.length)
  873. {
  874. this.m_nCaretStart++;
  875. }
  876. }
  877. break;
  878. }
  879. else
  880. {
  881. this.m_nCaretStart--;
  882. }
  883. }
  884. nFormatSwtichPoint++;
  885. }
  886. }
  887. }
  888. this.m_strInputMaskData = strSaveData;
  889. this.m_heControl.value = strSaveData;
  890. };
  891. Format.prototype.dayFormatCheck = function (strInputValue)
  892. {
  893. if (-1 != this.m_strFormat.indexOf("yyyy") && -1 != this.m_strFormat.indexOf("mm") && -1 != this.m_strFormat.indexOf("dd"))
  894. {
  895. var htFormatData = new Hashtable();
  896. var arFormatPatt = this.m_strFormat.split(/\W/g);
  897. var arInputPatt = strInputValue.split(/\W/g);
  898. for (var i=0; i< arFormatPatt.length; i++)
  899. {
  900. htFormatData[arFormatPatt[i]] = null != arInputPatt[i] ? arInputPatt[i] : "0";
  901. }
  902. if (0 != htFormatData["mm"])
  903. {
  904. var nYear = parseInt(parseFloat(htFormatData["yyyy"]));
  905. var nMonth = parseInt(parseFloat(htFormatData["mm"]));
  906. var nDay = parseInt(parseFloat(htFormatData["dd"]));
  907. var strMonthDays = "312931303130313130313031";
  908. var strEndDay = strMonthDays.substring(((nMonth-1)*2), ((nMonth-1)*2+2));
  909. if (htFormatData["yyyy"].length > 3 && (nMonth == 2) && !((((nYear%4 == 0) && (nYear%100 != 0)) || (nYear%400 == 0)))) // 2월의 경우 별도로 마지막날 계산
  910. {
  911. strEndDay = "28";
  912. }
  913. if (nDay <= parseInt(parseFloat(strEndDay)))
  914. {
  915. return true;
  916. }
  917. else
  918. {
  919. return false;
  920. }
  921. }
  922. }
  923. return true;
  924. };
  925. Format.prototype.validateFormat = function (nInputStringLength, strInputValue, event)
  926. {
  927. if ("" == strInputValue) //직접적인 입력이 있을때
  928. {
  929. var nkeyCode = event.keyCode;
  930. if (nkeyCode >= 96 && nkeyCode <= 105) //키패드 0 ~ 9 : 96 ~ 105 -> 숫자키코드로 변환
  931. {
  932. nkeyCode = nkeyCode - 48;
  933. }
  934. }
  935. else //컨트롤에 value 값이 존재할때
  936. {
  937. var nkeyCode = strInputValue.charCodeAt(0);
  938. }
  939. switch (this.m_strFormat.charAt(nInputStringLength))
  940. {
  941. case "9":
  942. {
  943. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  944. {
  945. return String.fromCharCode(nkeyCode);
  946. }
  947. return "";
  948. }
  949. case "y":
  950. {
  951. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  952. {
  953. return String.fromCharCode(nkeyCode);
  954. }
  955. return "";
  956. }
  957. case "m":
  958. {
  959. if ("m" == this.m_strFormat.charAt(nInputStringLength + 1))
  960. {
  961. if ( nkeyCode >= 48 && nkeyCode <= 49 )
  962. {
  963. return String.fromCharCode(nkeyCode);
  964. }
  965. }
  966. else
  967. {
  968. if("m" == this.m_strFormat.charAt(nInputStringLength - 1) && "1" == this.m_heControl.value.charAt(nInputStringLength - 1))
  969. {
  970. if ( nkeyCode >= 48 && nkeyCode <= 50 )
  971. {
  972. return String.fromCharCode(nkeyCode);
  973. }
  974. }
  975. else
  976. {
  977. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  978. {
  979. return String.fromCharCode(nkeyCode);
  980. }
  981. }
  982. }
  983. return "";
  984. }
  985. case "d":
  986. {
  987. if ("d" == this.m_strFormat.charAt(nInputStringLength + 1))
  988. {
  989. if ("m" == this.m_strFormat.charAt(nInputStringLength - 2) && "2" == this.m_heControl.value.charAt(nInputStringLength - 2) &&
  990. (("m" == this.m_strFormat.charAt(nInputStringLength - 3) && "0" == this.m_heControl.value.charAt(nInputStringLength - 3)) ||
  991. "m" != this.m_strFormat.charAt(nInputStringLength - 3)))
  992. {
  993. if ( nkeyCode >= 48 && nkeyCode <= 50 )
  994. {
  995. return String.fromCharCode(nkeyCode);
  996. }
  997. }
  998. else
  999. {
  1000. if ( nkeyCode >= 48 && nkeyCode <= 51 )
  1001. {
  1002. return String.fromCharCode(nkeyCode);
  1003. }
  1004. }
  1005. }
  1006. else
  1007. {
  1008. if ("d" == this.m_strFormat.charAt(nInputStringLength - 1) && "3" != this.m_heControl.value.charAt(nInputStringLength - 1))
  1009. {
  1010. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  1011. {
  1012. return String.fromCharCode(nkeyCode);
  1013. }
  1014. }
  1015. else if ("d" == this.m_strFormat.charAt(nInputStringLength - 1) && "3" == this.m_heControl.value.charAt(nInputStringLength - 1))
  1016. {
  1017. if ( nkeyCode >= 48 && nkeyCode <= 49 )
  1018. {
  1019. return String.fromCharCode(nkeyCode);
  1020. }
  1021. }
  1022. else
  1023. {
  1024. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  1025. {
  1026. return String.fromCharCode(nkeyCode);
  1027. }
  1028. }
  1029. }
  1030. return "";
  1031. }
  1032. case "h":
  1033. {
  1034. if ("h" == this.m_strFormat.charAt(nInputStringLength + 1))
  1035. {
  1036. if ( nkeyCode >= 48 && nkeyCode <= 50 )
  1037. {
  1038. return String.fromCharCode(nkeyCode);
  1039. }
  1040. }
  1041. else
  1042. {
  1043. if("h" == this.m_strFormat.charAt(nInputStringLength - 1) && "2" == this.m_heControl.value.charAt(nInputStringLength - 1))
  1044. {
  1045. if ( nkeyCode >= 48 && nkeyCode <= 52 )
  1046. {
  1047. return String.fromCharCode(nkeyCode);
  1048. }
  1049. }
  1050. else
  1051. {
  1052. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  1053. {
  1054. return String.fromCharCode(nkeyCode);
  1055. }
  1056. }
  1057. }
  1058. return "";
  1059. }
  1060. case "n":
  1061. {
  1062. if ("n" == this.m_strFormat.charAt(nInputStringLength + 1))
  1063. {
  1064. if ( nkeyCode >= 48 && nkeyCode <= 53 )
  1065. {
  1066. return String.fromCharCode(nkeyCode);
  1067. }
  1068. }
  1069. else
  1070. {
  1071. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  1072. {
  1073. return String.fromCharCode(nkeyCode);
  1074. }
  1075. }
  1076. return "";
  1077. }
  1078. case "s":
  1079. {
  1080. if ("s" == this.m_strFormat.charAt(nInputStringLength + 1))
  1081. {
  1082. if ( nkeyCode >= 48 && nkeyCode <= 53 )
  1083. {
  1084. return String.fromCharCode(nkeyCode);
  1085. }
  1086. }
  1087. else
  1088. {
  1089. if ( nkeyCode >= 48 && nkeyCode <= 57 )
  1090. {
  1091. return String.fromCharCode(nkeyCode);
  1092. }
  1093. }
  1094. return "";
  1095. }
  1096. case "A":
  1097. {
  1098. if ( (nkeyCode >= 48 && nkeyCode <= 57) || (nkeyCode >= 65 && nkeyCode <= 90) || (nkeyCode >= 97 && nkeyCode <= 129))
  1099. {
  1100. return strInputValue;
  1101. }
  1102. return "";
  1103. }
  1104. case "a":
  1105. {
  1106. if ((nkeyCode == 32) || (nkeyCode >= 48 && nkeyCode <= 57) || (nkeyCode >= 65 && nkeyCode <= 90) || (nkeyCode >= 97 && nkeyCode <= 129))
  1107. {
  1108. return strInputValue;
  1109. }
  1110. return "";
  1111. }
  1112. case "C":
  1113. {
  1114. if ((nkeyCode >= 48 && nkeyCode <= 112) || nkeyCode > 185 || (nkeyCode >= 97 && nkeyCode <= 129))
  1115. {
  1116. return strInputValue;
  1117. }
  1118. return "";
  1119. }
  1120. case "L":
  1121. {
  1122. if ((nkeyCode >= 65 && nkeyCode <= 90) || (nkeyCode >= 97 && nkeyCode <= 129))
  1123. {
  1124. return strInputValue;
  1125. }
  1126. return "";
  1127. }
  1128. default :
  1129. {
  1130. return "";
  1131. }
  1132. }
  1133. };
  1134. /**
  1135. * format의 길이
  1136. * @return
  1137. */
  1138. Format.prototype.getLength = function ()
  1139. {
  1140. return this.m_nLength;
  1141. };
  1142. /**
  1143. * format 문자
  1144. * @return
  1145. */
  1146. Format.prototype.getFormatString = function ()
  1147. {
  1148. return this.m_strFormat;
  1149. };
  1150. /**
  1151. * format 후 실제 data
  1152. * @return
  1153. */
  1154. Format.prototype.getFormatInputData = function ()
  1155. {
  1156. return this.m_strInputRealityData;
  1157. };
  1158. /**
  1159. * format 후 mask data
  1160. * @return
  1161. */
  1162. Format.prototype.getFormatInputMaskData = function ()
  1163. {
  1164. return this.m_strInputMaskData;
  1165. };
  1166. /**
  1167. * format이 존재하는지 판단하여 boolean값으로 return 한다
  1168. * @return
  1169. */
  1170. Format.prototype.getFormatExist = function ()
  1171. {
  1172. return this.m_bExistFormat;
  1173. };
  1174. /**
  1175. * format이 존재여부를 설정한다
  1176. * @return
  1177. */
  1178. Format.prototype.setFormatExist = function (bExistFormat)
  1179. {
  1180. return this.m_bExistFormat = bExistFormat;
  1181. };
  1182. /**
  1183. * 화폐에 관련된 format이 존재하는지 판단하여 boolean값으로 return 한다
  1184. */
  1185. Format.prototype.getMoneyUnitFormatExist = function ()
  1186. {
  1187. return this.m_bExistMoneyUnitFormat;
  1188. };