jquery.inputmask.date.extensions.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. /*!
  2. * jquery.inputmask.date.extensions.js
  3. * http://github.com/RobinHerbots/jquery.inputmask
  4. * Copyright (c) 2010 - 2014 Robin Herbots
  5. * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
  6. * Version: 3.1.34
  7. */
  8. !function(factory) {
  9. "function" == typeof define && define.amd ? define([ "jquery", "./jquery.inputmask" ], factory) : factory(jQuery);
  10. }(function($) {
  11. return $.extend($.inputmask.defaults.definitions, {
  12. h: {
  13. validator: "[01][0-9]|2[0-3]",
  14. cardinality: 2,
  15. prevalidator: [ {
  16. validator: "[0-2]",
  17. cardinality: 1
  18. } ]
  19. },
  20. s: {
  21. validator: "[0-5][0-9]",
  22. cardinality: 2,
  23. prevalidator: [ {
  24. validator: "[0-5]",
  25. cardinality: 1
  26. } ]
  27. },
  28. d: {
  29. validator: "0[1-9]|[12][0-9]|3[01]",
  30. cardinality: 2,
  31. prevalidator: [ {
  32. validator: "[0-3]",
  33. cardinality: 1
  34. } ]
  35. },
  36. m: {
  37. validator: "0[1-9]|1[012]",
  38. cardinality: 2,
  39. prevalidator: [ {
  40. validator: "[01]",
  41. cardinality: 1
  42. } ]
  43. },
  44. y: {
  45. validator: "(19|20)\\d{2}",
  46. cardinality: 4,
  47. prevalidator: [ {
  48. validator: "[12]",
  49. cardinality: 1
  50. }, {
  51. validator: "(19|20)",
  52. cardinality: 2
  53. }, {
  54. validator: "(19|20)\\d",
  55. cardinality: 3
  56. } ]
  57. }
  58. }), $.extend($.inputmask.defaults.aliases, {
  59. "dd/mm/yyyy": {
  60. mask: "1/2/y",
  61. placeholder: "dd/mm/yyyy",
  62. regex: {
  63. val1pre: new RegExp("[0-3]"),
  64. val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
  65. val2pre: function(separator) {
  66. var escapedSeparator = $.inputmask.escapeRegex.call(this, separator);
  67. return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
  68. },
  69. val2: function(separator) {
  70. var escapedSeparator = $.inputmask.escapeRegex.call(this, separator);
  71. return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
  72. }
  73. },
  74. leapday: "29/02/",
  75. separator: "/",
  76. yearrange: {
  77. minyear: 1900,
  78. maxyear: 2099
  79. },
  80. isInYearRange: function(chrs, minyear, maxyear) {
  81. if (isNaN(chrs)) return !1;
  82. var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
  83. return (isNaN(enteredyear) ? !1 : enteredyear >= minyear && maxyear >= enteredyear) || (isNaN(enteredyear2) ? !1 : enteredyear2 >= minyear && maxyear >= enteredyear2);
  84. },
  85. determinebaseyear: function(minyear, maxyear, hint) {
  86. var currentyear = new Date().getFullYear();
  87. if (minyear > currentyear) return minyear;
  88. if (currentyear > maxyear) {
  89. for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxYearPrefix + hint > maxyear; ) maxYearPrefix--;
  90. var maxxYear = maxYearPrefix + maxYearPostfix;
  91. return minyear > maxxYear ? minyear : maxxYear;
  92. }
  93. return currentyear;
  94. },
  95. onKeyUp: function(e) {
  96. var $input = $(this);
  97. if (e.ctrlKey && e.keyCode == $.inputmask.keyCode.RIGHT) {
  98. var today = new Date();
  99. $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());
  100. }
  101. },
  102. definitions: {
  103. "1": {
  104. validator: function(chrs, maskset, pos, strict, opts) {
  105. var isValid = opts.regex.val1.test(chrs);
  106. return strict || isValid || chrs.charAt(1) != opts.separator && -1 == "-./".indexOf(chrs.charAt(1)) || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
  107. {
  108. refreshFromBuffer: {
  109. start: pos - 1,
  110. end: pos
  111. },
  112. pos: pos,
  113. c: chrs.charAt(0)
  114. });
  115. },
  116. cardinality: 2,
  117. prevalidator: [ {
  118. validator: function(chrs, maskset, pos, strict, opts) {
  119. isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
  120. var isValid = 1 == chrs.length ? opts.regex.val1pre.test(chrs) : opts.regex.val1.test(chrs);
  121. return strict || isValid || !(isValid = opts.regex.val1.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
  122. pos++, {
  123. pos: pos
  124. });
  125. },
  126. cardinality: 1
  127. } ]
  128. },
  129. "2": {
  130. validator: function(chrs, maskset, pos, strict, opts) {
  131. var frontValue = opts.mask.indexOf("2") == opts.mask.length - 1 ? maskset.buffer.join("").substr(5, 3) : maskset.buffer.join("").substr(0, 3);
  132. -1 != frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
  133. var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
  134. if (!strict && !isValid && (chrs.charAt(1) == opts.separator || -1 != "-./".indexOf(chrs.charAt(1))) && (isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
  135. {
  136. refreshFromBuffer: {
  137. start: pos - 1,
  138. end: pos
  139. },
  140. pos: pos,
  141. c: chrs.charAt(0)
  142. };
  143. if (opts.mask.indexOf("2") == opts.mask.length - 1 && isValid) {
  144. var dayMonthValue = maskset.buffer.join("").substr(4, 4) + chrs;
  145. if (dayMonthValue != opts.leapday) return !0;
  146. var year = parseInt(maskset.buffer.join("").substr(0, 4), 10);
  147. return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
  148. }
  149. return isValid;
  150. },
  151. cardinality: 2,
  152. prevalidator: [ {
  153. validator: function(chrs, maskset, pos, strict, opts) {
  154. isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
  155. var frontValue = opts.mask.indexOf("2") == opts.mask.length - 1 ? maskset.buffer.join("").substr(5, 3) : maskset.buffer.join("").substr(0, 3);
  156. -1 != frontValue.indexOf(opts.placeholder[0]) && (frontValue = "01" + opts.separator);
  157. var isValid = 1 == chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
  158. return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
  159. pos++, {
  160. pos: pos
  161. });
  162. },
  163. cardinality: 1
  164. } ]
  165. },
  166. y: {
  167. validator: function(chrs, maskset, pos, strict, opts) {
  168. if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
  169. var dayMonthValue = maskset.buffer.join("").substr(0, 6);
  170. if (dayMonthValue != opts.leapday) return !0;
  171. var year = parseInt(chrs, 10);
  172. return year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
  173. }
  174. return !1;
  175. },
  176. cardinality: 4,
  177. prevalidator: [ {
  178. validator: function(chrs, maskset, pos, strict, opts) {
  179. var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  180. if (!strict && !isValid) {
  181. var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
  182. if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
  183. {
  184. pos: pos
  185. };
  186. if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2),
  187. isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
  188. maskset.buffer[pos++] = yearPrefix.charAt(1), {
  189. pos: pos
  190. };
  191. }
  192. return isValid;
  193. },
  194. cardinality: 1
  195. }, {
  196. validator: function(chrs, maskset, pos, strict, opts) {
  197. var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  198. if (!strict && !isValid) {
  199. var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
  200. if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1),
  201. {
  202. pos: pos
  203. };
  204. if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2),
  205. opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
  206. var dayMonthValue = maskset.buffer.join("").substr(0, 6);
  207. if (dayMonthValue != opts.leapday) isValid = !0; else {
  208. var year = parseInt(chrs, 10);
  209. isValid = year % 4 === 0 ? year % 100 === 0 ? year % 400 === 0 ? !0 : !1 : !0 : !1;
  210. }
  211. } else isValid = !1;
  212. if (isValid) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), maskset.buffer[pos++] = yearPrefix.charAt(1),
  213. maskset.buffer[pos++] = chrs.charAt(0), {
  214. refreshFromBuffer: {
  215. start: pos - 3,
  216. end: pos
  217. },
  218. pos: pos
  219. };
  220. }
  221. return isValid;
  222. },
  223. cardinality: 2
  224. }, {
  225. validator: function(chrs, maskset, pos, strict, opts) {
  226. return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  227. },
  228. cardinality: 3
  229. } ]
  230. }
  231. },
  232. insertMode: !1,
  233. autoUnmask: !1
  234. },
  235. "mm/dd/yyyy": {
  236. placeholder: "mm/dd/yyyy",
  237. alias: "dd/mm/yyyy",
  238. regex: {
  239. val2pre: function(separator) {
  240. var escapedSeparator = $.inputmask.escapeRegex.call(this, separator);
  241. return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
  242. },
  243. val2: function(separator) {
  244. var escapedSeparator = $.inputmask.escapeRegex.call(this, separator);
  245. return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
  246. },
  247. val1pre: new RegExp("[01]"),
  248. val1: new RegExp("0[1-9]|1[012]")
  249. },
  250. leapday: "02/29/",
  251. onKeyUp: function(e) {
  252. var $input = $(this);
  253. if (e.ctrlKey && e.keyCode == $.inputmask.keyCode.RIGHT) {
  254. var today = new Date();
  255. $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
  256. }
  257. }
  258. },
  259. "yyyy/mm/dd": {
  260. mask: "y/1/2",
  261. placeholder: "yyyy/mm/dd",
  262. alias: "mm/dd/yyyy",
  263. leapday: "/02/29",
  264. onKeyUp: function(e) {
  265. var $input = $(this);
  266. if (e.ctrlKey && e.keyCode == $.inputmask.keyCode.RIGHT) {
  267. var today = new Date();
  268. $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());
  269. }
  270. }
  271. },
  272. "dd.mm.yyyy": {
  273. mask: "1.2.y",
  274. placeholder: "dd.mm.yyyy",
  275. leapday: "29.02.",
  276. separator: ".",
  277. alias: "dd/mm/yyyy"
  278. },
  279. "dd-mm-yyyy": {
  280. mask: "1-2-y",
  281. placeholder: "dd-mm-yyyy",
  282. leapday: "29-02-",
  283. separator: "-",
  284. alias: "dd/mm/yyyy"
  285. },
  286. "mm.dd.yyyy": {
  287. mask: "1.2.y",
  288. placeholder: "mm.dd.yyyy",
  289. leapday: "02.29.",
  290. separator: ".",
  291. alias: "mm/dd/yyyy"
  292. },
  293. "mm-dd-yyyy": {
  294. mask: "1-2-y",
  295. placeholder: "mm-dd-yyyy",
  296. leapday: "02-29-",
  297. separator: "-",
  298. alias: "mm/dd/yyyy"
  299. },
  300. "yyyy.mm.dd": {
  301. mask: "y.1.2",
  302. placeholder: "yyyy.mm.dd",
  303. leapday: ".02.29",
  304. separator: ".",
  305. alias: "yyyy/mm/dd"
  306. },
  307. "yyyy-mm-dd": {
  308. mask: "y-1-2",
  309. placeholder: "yyyy-mm-dd",
  310. leapday: "-02-29",
  311. separator: "-",
  312. alias: "yyyy/mm/dd"
  313. },
  314. datetime: {
  315. mask: "1/2/y h:s",
  316. placeholder: "dd/mm/yyyy hh:mm",
  317. alias: "dd/mm/yyyy",
  318. regex: {
  319. hrspre: new RegExp("[012]"),
  320. hrs24: new RegExp("2[0-4]|1[3-9]"),
  321. hrs: new RegExp("[01][0-9]|2[0-4]"),
  322. ampm: new RegExp("^[a|p|A|P][m|M]"),
  323. mspre: new RegExp("[0-5]"),
  324. ms: new RegExp("[0-5][0-9]")
  325. },
  326. timeseparator: ":",
  327. hourFormat: "24",
  328. definitions: {
  329. h: {
  330. validator: function(chrs, maskset, pos, strict, opts) {
  331. if ("24" == opts.hourFormat && 24 == parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0",
  332. maskset.buffer[pos] = "0", {
  333. refreshFromBuffer: {
  334. start: pos - 1,
  335. end: pos
  336. },
  337. c: "0"
  338. };
  339. var isValid = opts.regex.hrs.test(chrs);
  340. if (!strict && !isValid && (chrs.charAt(1) == opts.timeseparator || -1 != "-.:".indexOf(chrs.charAt(1))) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
  341. maskset.buffer[pos] = chrs.charAt(0), pos++, {
  342. refreshFromBuffer: {
  343. start: pos - 2,
  344. end: pos
  345. },
  346. pos: pos,
  347. c: opts.timeseparator
  348. };
  349. if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
  350. var tmp = parseInt(chrs, 10);
  351. return 24 == tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p",
  352. maskset.buffer[pos + 6] = "m"), tmp -= 12, 10 > tmp ? (maskset.buffer[pos] = tmp.toString(),
  353. maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1),
  354. maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
  355. refreshFromBuffer: {
  356. start: pos - 1,
  357. end: pos + 6
  358. },
  359. c: maskset.buffer[pos]
  360. };
  361. }
  362. return isValid;
  363. },
  364. cardinality: 2,
  365. prevalidator: [ {
  366. validator: function(chrs, maskset, pos, strict, opts) {
  367. var isValid = opts.regex.hrspre.test(chrs);
  368. return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
  369. pos++, {
  370. pos: pos
  371. });
  372. },
  373. cardinality: 1
  374. } ]
  375. },
  376. s: {
  377. validator: "[0-5][0-9]",
  378. cardinality: 2,
  379. prevalidator: [ {
  380. validator: function(chrs, maskset, pos, strict, opts) {
  381. var isValid = opts.regex.mspre.test(chrs);
  382. return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
  383. pos++, {
  384. pos: pos
  385. });
  386. },
  387. cardinality: 1
  388. } ]
  389. },
  390. t: {
  391. validator: function(chrs, maskset, pos, strict, opts) {
  392. return opts.regex.ampm.test(chrs + "m");
  393. },
  394. casing: "lower",
  395. cardinality: 1
  396. }
  397. },
  398. insertMode: !1,
  399. autoUnmask: !1
  400. },
  401. datetime12: {
  402. mask: "1/2/y h:s t\\m",
  403. placeholder: "dd/mm/yyyy hh:mm xm",
  404. alias: "datetime",
  405. hourFormat: "12"
  406. },
  407. "hh:mm t": {
  408. mask: "h:s t\\m",
  409. placeholder: "hh:mm xm",
  410. alias: "datetime",
  411. hourFormat: "12"
  412. },
  413. "h:s t": {
  414. mask: "h:s t\\m",
  415. placeholder: "hh:mm xm",
  416. alias: "datetime",
  417. hourFormat: "12"
  418. },
  419. "hh:mm:ss": {
  420. mask: "h:s:s",
  421. placeholder: "hh:mm:ss",
  422. alias: "datetime",
  423. autoUnmask: !1
  424. },
  425. "hh:mm": {
  426. mask: "h:s",
  427. placeholder: "hh:mm",
  428. alias: "datetime",
  429. autoUnmask: !1
  430. },
  431. date: {
  432. alias: "dd/mm/yyyy"
  433. },
  434. "mm/yyyy": {
  435. mask: "1/y",
  436. placeholder: "mm/yyyy",
  437. leapday: "donotuse",
  438. separator: "/",
  439. alias: "mm/dd/yyyy"
  440. }
  441. }), $.fn.inputmask;
  442. });