inputmask.date.extensions.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. /*
  2. Input Mask plugin extensions
  3. http://github.com/RobinHerbots/jquery.inputmask
  4. Copyright (c) 2010 - Robin Herbots
  5. Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
  6. Version: 0.0.0-dev
  7. Optional extensions on the jquery.inputmask base
  8. */
  9. (function (factory) {
  10. if (typeof define === "function" && define.amd) {
  11. define(["inputmask.dependencyLib", "inputmask"], factory);
  12. } else if (typeof exports === "object") {
  13. module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask"));
  14. } else {
  15. factory(window.dependencyLib || jQuery, window.Inputmask);
  16. }
  17. }
  18. (function ($, Inputmask) {
  19. //date & time aliases
  20. Inputmask.extendDefinitions({
  21. "h": { //hours
  22. validator: "[01][0-9]|2[0-3]",
  23. cardinality: 2,
  24. prevalidator: [{
  25. validator: "[0-2]",
  26. cardinality: 1
  27. }]
  28. },
  29. "s": { //seconds || minutes
  30. validator: "[0-5][0-9]",
  31. cardinality: 2,
  32. prevalidator: [{
  33. validator: "[0-5]",
  34. cardinality: 1
  35. }]
  36. },
  37. "d": { //basic day
  38. validator: "0[1-9]|[12][0-9]|3[01]",
  39. cardinality: 2,
  40. prevalidator: [{
  41. validator: "[0-3]",
  42. cardinality: 1
  43. }]
  44. },
  45. "m": { //basic month
  46. validator: "0[1-9]|1[012]",
  47. cardinality: 2,
  48. prevalidator: [{
  49. validator: "[01]",
  50. cardinality: 1
  51. }]
  52. },
  53. "y": { //basic year
  54. validator: "(19|20)\\d{2}",
  55. cardinality: 4,
  56. prevalidator: [{
  57. validator: "[12]",
  58. cardinality: 1
  59. }, {
  60. validator: "(19|20)",
  61. cardinality: 2
  62. }, {
  63. validator: "(19|20)\\d",
  64. cardinality: 3
  65. }]
  66. }
  67. });
  68. Inputmask.extendAliases({
  69. "dd/mm/yyyy": {
  70. mask: "1/2/y",
  71. placeholder: "dd/mm/yyyy",
  72. regex: {
  73. val1pre: new RegExp("[0-3]"), //daypre
  74. val1: new RegExp("0[1-9]|[12][0-9]|3[01]"), //day
  75. val2pre: function (separator) {
  76. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  77. return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
  78. }, //monthpre
  79. val2: function (separator) {
  80. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  81. 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]))");
  82. } //month
  83. },
  84. leapday: "29/02/",
  85. separator: "/",
  86. yearrange: {
  87. minyear: 1900,
  88. maxyear: 2099
  89. },
  90. isInYearRange: function (chrs, minyear, maxyear) {
  91. if (isNaN(chrs)) return false;
  92. var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length)));
  93. var enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
  94. return (!isNaN(enteredyear) ? minyear <= enteredyear && enteredyear <= maxyear : false) ||
  95. (!isNaN(enteredyear2) ? minyear <= enteredyear2 && enteredyear2 <= maxyear : false);
  96. },
  97. determinebaseyear: function (minyear, maxyear, hint) {
  98. var currentyear = (new Date()).getFullYear();
  99. if (minyear > currentyear) return minyear;
  100. if (maxyear < currentyear) {
  101. var maxYearPrefix = maxyear.toString().slice(0, 2);
  102. var maxYearPostfix = maxyear.toString().slice(2, 4);
  103. while (maxyear < maxYearPrefix + hint) {
  104. maxYearPrefix--;
  105. }
  106. var maxxYear = maxYearPrefix + maxYearPostfix;
  107. return minyear > maxxYear ? minyear : maxxYear;
  108. }
  109. if (minyear <= currentyear && currentyear <= maxyear) {
  110. var currentYearPrefix = currentyear.toString().slice(0, 2);
  111. while (maxyear < currentYearPrefix + hint) {
  112. currentYearPrefix--;
  113. }
  114. var currentYearAndHint = currentYearPrefix + hint;
  115. return currentYearAndHint < minyear ? minyear : currentYearAndHint;
  116. }
  117. return currentyear;
  118. },
  119. onKeyDown: function (e, buffer, caretPos, opts) {
  120. var $input = $(this);
  121. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  122. var today = new Date();
  123. $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());
  124. $input.trigger("setvalue");
  125. }
  126. },
  127. getFrontValue: function (mask, buffer, opts) {
  128. var start = 0,
  129. length = 0;
  130. for (var i = 0; i < mask.length; i++) {
  131. if (mask.charAt(i) === "2") break;
  132. var definition = opts.definitions[mask.charAt(i)];
  133. if (definition) {
  134. start += length;
  135. length = definition.cardinality;
  136. } else length++;
  137. }
  138. return buffer.join("").substr(start, length);
  139. },
  140. definitions: {
  141. "1": { //val1 ~ day or month
  142. validator: function (chrs, maskset, pos, strict, opts) {
  143. var isValid = opts.regex.val1.test(chrs);
  144. if (!strict && !isValid) {
  145. if (chrs.charAt(1) === opts.separator || "-./".indexOf(chrs.charAt(1)) !== -1) {
  146. isValid = opts.regex.val1.test("0" + chrs.charAt(0));
  147. if (isValid) {
  148. maskset.buffer[pos - 1] = "0";
  149. return {
  150. "refreshFromBuffer": {
  151. start: pos - 1,
  152. end: pos
  153. },
  154. "pos": pos,
  155. "c": chrs.charAt(0)
  156. };
  157. }
  158. }
  159. }
  160. return isValid;
  161. },
  162. cardinality: 2,
  163. prevalidator: [{
  164. validator: function (chrs, maskset, pos, strict, opts) {
  165. var pchrs = chrs;
  166. if (!isNaN(maskset.buffer[pos + 1])) pchrs += maskset.buffer[pos + 1];
  167. var isValid = pchrs.length === 1 ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
  168. if (!strict && !isValid) {
  169. isValid = opts.regex.val1.test(chrs + "0");
  170. if (isValid) {
  171. maskset.buffer[pos] = chrs;
  172. maskset.buffer[++pos] = "0";
  173. return {
  174. "pos": pos,
  175. "c": "0"
  176. };
  177. }
  178. isValid = opts.regex.val1.test("0" + chrs);
  179. if (isValid) {
  180. maskset.buffer[pos] = "0";
  181. pos++;
  182. return {
  183. "pos": pos
  184. };
  185. }
  186. }
  187. return isValid;
  188. },
  189. cardinality: 1
  190. }]
  191. },
  192. "2": { //val2 ~ day or month
  193. validator: function (chrs, maskset, pos, strict, opts) {
  194. var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
  195. if (frontValue.indexOf(opts.placeholder[0]) !== -1) frontValue = "01" + opts.separator;
  196. var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
  197. if (!strict && !isValid) {
  198. if (chrs.charAt(1) === opts.separator || "-./".indexOf(chrs.charAt(1)) !== -1) {
  199. isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0));
  200. if (isValid) {
  201. maskset.buffer[pos - 1] = "0";
  202. return {
  203. "refreshFromBuffer": {
  204. start: pos - 1,
  205. end: pos
  206. },
  207. "pos": pos,
  208. "c": chrs.charAt(0)
  209. };
  210. }
  211. }
  212. }
  213. //check leap yeap
  214. if ((opts.mask.indexOf("2") === opts.mask.length - 1) && isValid) {
  215. var dayMonthValue = maskset.buffer.join("").substr(4, 4) + chrs;
  216. if (dayMonthValue !== opts.leapday) {
  217. return true;
  218. } else {
  219. var year = parseInt(maskset.buffer.join("").substr(0, 4), 10); //detect leap year
  220. if (year % 4 === 0) {
  221. if (year % 100 === 0) {
  222. if (year % 400 === 0) {
  223. return true;
  224. } else {
  225. return false;
  226. }
  227. } else {
  228. return true;
  229. }
  230. } else return false;
  231. }
  232. }
  233. return isValid;
  234. },
  235. cardinality: 2,
  236. prevalidator: [{
  237. validator: function (chrs, maskset, pos, strict, opts) {
  238. if (!isNaN(maskset.buffer[pos + 1])) chrs += maskset.buffer[pos + 1];
  239. var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
  240. if (frontValue.indexOf(opts.placeholder[0]) !== -1) frontValue = "01" + opts.separator;
  241. var isValid = chrs.length === 1 ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
  242. if (!strict && !isValid) {
  243. isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs);
  244. if (isValid) {
  245. maskset.buffer[pos] = "0";
  246. pos++;
  247. return {
  248. "pos": pos
  249. };
  250. }
  251. }
  252. return isValid;
  253. },
  254. cardinality: 1
  255. }]
  256. },
  257. "y": { //year
  258. validator: function (chrs, maskset, pos, strict, opts) {
  259. if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
  260. var dayMonthValue = maskset.buffer.join("").substr(0, 6);
  261. if (dayMonthValue !== opts.leapday) {
  262. return true;
  263. } else {
  264. var year = parseInt(chrs, 10); //detect leap year
  265. if (year % 4 === 0) {
  266. if (year % 100 === 0) {
  267. if (year % 400 === 0) return true;
  268. else return false;
  269. } else return true;
  270. } else return false;
  271. }
  272. } else return false;
  273. },
  274. cardinality: 4,
  275. prevalidator: [{
  276. validator: function (chrs, maskset, pos, strict, opts) {
  277. var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  278. if (!strict && !isValid) {
  279. var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
  280. isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  281. if (isValid) {
  282. maskset.buffer[pos++] = yearPrefix.charAt(0);
  283. return {
  284. "pos": pos
  285. };
  286. }
  287. yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2);
  288. isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  289. if (isValid) {
  290. maskset.buffer[pos++] = yearPrefix.charAt(0);
  291. maskset.buffer[pos++] = yearPrefix.charAt(1);
  292. return {
  293. "pos": pos
  294. };
  295. }
  296. }
  297. return isValid;
  298. },
  299. cardinality: 1
  300. }, {
  301. validator: function (chrs, maskset, pos, strict, opts) {
  302. var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  303. if (!strict && !isValid) {
  304. var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
  305. isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);
  306. if (isValid) {
  307. maskset.buffer[pos++] = yearPrefix.charAt(1);
  308. return {
  309. "pos": pos
  310. };
  311. }
  312. yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
  313. if (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
  314. var dayMonthValue = maskset.buffer.join("").substr(0, 6);
  315. if (dayMonthValue !== opts.leapday) {
  316. isValid = true;
  317. } else {
  318. var year = parseInt(chrs, 10); //detect leap year
  319. if (year % 4 === 0) {
  320. if (year % 100 === 0) {
  321. if (year % 400 === 0) isValid = true;
  322. else isValid = false;
  323. } else isValid = true;
  324. } else isValid = false;
  325. }
  326. } else isValid = false;
  327. if (isValid) {
  328. maskset.buffer[pos - 1] = yearPrefix.charAt(0);
  329. maskset.buffer[pos++] = yearPrefix.charAt(1);
  330. maskset.buffer[pos++] = chrs.charAt(0);
  331. return {
  332. "refreshFromBuffer": {
  333. start: pos - 3,
  334. end: pos
  335. },
  336. "pos": pos
  337. };
  338. }
  339. }
  340. return isValid;
  341. },
  342. cardinality: 2
  343. }, {
  344. validator: function (chrs, maskset, pos, strict, opts) {
  345. return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
  346. },
  347. cardinality: 3
  348. }]
  349. }
  350. },
  351. insertMode: false,
  352. autoUnmask: false
  353. },
  354. "mm/dd/yyyy": {
  355. placeholder: "mm/dd/yyyy",
  356. alias: "dd/mm/yyyy", //reuse functionality of dd/mm/yyyy alias
  357. regex: {
  358. val2pre: function (separator) {
  359. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  360. return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
  361. }, //daypre
  362. val2: function (separator) {
  363. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  364. 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)");
  365. }, //day
  366. val1pre: new RegExp("[01]"), //monthpre
  367. val1: new RegExp("0[1-9]|1[012]") //month
  368. },
  369. leapday: "02/29/",
  370. onKeyDown: function (e, buffer, caretPos, opts) {
  371. var $input = $(this);
  372. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  373. var today = new Date();
  374. $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
  375. $input.trigger("setvalue");
  376. }
  377. }
  378. },
  379. "yyyy/mm/dd": {
  380. mask: "y/1/2",
  381. placeholder: "yyyy/mm/dd",
  382. alias: "mm/dd/yyyy",
  383. leapday: "/02/29",
  384. onKeyDown: function (e, buffer, caretPos, opts) {
  385. var $input = $(this);
  386. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  387. var today = new Date();
  388. $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());
  389. $input.trigger("setvalue");
  390. }
  391. }
  392. },
  393. "dd.mm.yyyy": {
  394. mask: "1.2.y",
  395. placeholder: "dd.mm.yyyy",
  396. leapday: "29.02.",
  397. separator: ".",
  398. alias: "dd/mm/yyyy"
  399. },
  400. "dd-mm-yyyy": {
  401. mask: "1-2-y",
  402. placeholder: "dd-mm-yyyy",
  403. leapday: "29-02-",
  404. separator: "-",
  405. alias: "dd/mm/yyyy"
  406. },
  407. "mm.dd.yyyy": {
  408. mask: "1.2.y",
  409. placeholder: "mm.dd.yyyy",
  410. leapday: "02.29.",
  411. separator: ".",
  412. alias: "mm/dd/yyyy"
  413. },
  414. "mm-dd-yyyy": {
  415. mask: "1-2-y",
  416. placeholder: "mm-dd-yyyy",
  417. leapday: "02-29-",
  418. separator: "-",
  419. alias: "mm/dd/yyyy"
  420. },
  421. "yyyy.mm.dd": {
  422. mask: "y.1.2",
  423. placeholder: "yyyy.mm.dd",
  424. leapday: ".02.29",
  425. separator: ".",
  426. alias: "yyyy/mm/dd"
  427. },
  428. "yyyy-mm-dd": {
  429. mask: "y-1-2",
  430. placeholder: "yyyy-mm-dd",
  431. leapday: "-02-29",
  432. separator: "-",
  433. alias: "yyyy/mm/dd"
  434. },
  435. "datetime": {
  436. mask: "1/2/y h:s",
  437. placeholder: "dd/mm/yyyy hh:mm",
  438. alias: "dd/mm/yyyy",
  439. regex: {
  440. hrspre: new RegExp("[012]"), //hours pre
  441. hrs24: new RegExp("2[0-4]|1[3-9]"),
  442. hrs: new RegExp("[01][0-9]|2[0-4]"), //hours
  443. ampm: new RegExp("^[a|p|A|P][m|M]"),
  444. mspre: new RegExp("[0-5]"), //minutes/seconds pre
  445. ms: new RegExp("[0-5][0-9]")
  446. },
  447. timeseparator: ":",
  448. hourFormat: "24", // or 12
  449. definitions: {
  450. "h": { //hours
  451. validator: function (chrs, maskset, pos, strict, opts) {
  452. if (opts.hourFormat === "24") {
  453. if (parseInt(chrs, 10) === 24) {
  454. maskset.buffer[pos - 1] = "0";
  455. maskset.buffer[pos] = "0";
  456. return {
  457. "refreshFromBuffer": {
  458. start: pos - 1,
  459. end: pos
  460. },
  461. "c": "0"
  462. };
  463. }
  464. }
  465. var isValid = opts.regex.hrs.test(chrs);
  466. if (!strict && !isValid) {
  467. if (chrs.charAt(1) === opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) !== -1) {
  468. isValid = opts.regex.hrs.test("0" + chrs.charAt(0));
  469. if (isValid) {
  470. maskset.buffer[pos - 1] = "0";
  471. maskset.buffer[pos] = chrs.charAt(0);
  472. pos++;
  473. return {
  474. "refreshFromBuffer": {
  475. start: pos - 2,
  476. end: pos
  477. },
  478. "pos": pos,
  479. "c": opts.timeseparator
  480. };
  481. }
  482. }
  483. }
  484. if (isValid && opts.hourFormat !== "24" && opts.regex.hrs24.test(chrs)) {
  485. var tmp = parseInt(chrs, 10);
  486. if (tmp === 24) {
  487. maskset.buffer[pos + 5] = "a";
  488. maskset.buffer[pos + 6] = "m";
  489. } else {
  490. maskset.buffer[pos + 5] = "p";
  491. maskset.buffer[pos + 6] = "m";
  492. }
  493. tmp = tmp - 12;
  494. if (tmp < 10) {
  495. maskset.buffer[pos] = tmp.toString();
  496. maskset.buffer[pos - 1] = "0";
  497. } else {
  498. maskset.buffer[pos] = tmp.toString().charAt(1);
  499. maskset.buffer[pos - 1] = tmp.toString().charAt(0);
  500. }
  501. return {
  502. "refreshFromBuffer": {
  503. start: pos - 1,
  504. end: pos + 6
  505. },
  506. "c": maskset.buffer[pos]
  507. };
  508. }
  509. return isValid;
  510. },
  511. cardinality: 2,
  512. prevalidator: [{
  513. validator: function (chrs, maskset, pos, strict, opts) {
  514. var isValid = opts.regex.hrspre.test(chrs);
  515. if (!strict && !isValid) {
  516. isValid = opts.regex.hrs.test("0" + chrs);
  517. if (isValid) {
  518. maskset.buffer[pos] = "0";
  519. pos++;
  520. return {
  521. "pos": pos
  522. };
  523. }
  524. }
  525. return isValid;
  526. },
  527. cardinality: 1
  528. }]
  529. },
  530. "s": { //seconds || minutes
  531. validator: "[0-5][0-9]",
  532. cardinality: 2,
  533. prevalidator: [{
  534. validator: function (chrs, maskset, pos, strict, opts) {
  535. var isValid = opts.regex.mspre.test(chrs);
  536. if (!strict && !isValid) {
  537. isValid = opts.regex.ms.test("0" + chrs);
  538. if (isValid) {
  539. maskset.buffer[pos] = "0";
  540. pos++;
  541. return {
  542. "pos": pos
  543. };
  544. }
  545. }
  546. return isValid;
  547. },
  548. cardinality: 1
  549. }]
  550. },
  551. "t": { //am/pm
  552. validator: function (chrs, maskset, pos, strict, opts) {
  553. return opts.regex.ampm.test(chrs + "m");
  554. },
  555. casing: "lower",
  556. cardinality: 1
  557. }
  558. },
  559. insertMode: false,
  560. autoUnmask: false
  561. },
  562. "datetime12": {
  563. mask: "1/2/y h:s t\\m",
  564. placeholder: "dd/mm/yyyy hh:mm xm",
  565. alias: "datetime",
  566. hourFormat: "12"
  567. },
  568. "mm/dd/yyyy hh:mm xm": {
  569. mask: "1/2/y h:s t\\m",
  570. placeholder: "mm/dd/yyyy hh:mm xm",
  571. alias: "datetime12",
  572. regex: {
  573. val2pre: function (separator) {
  574. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  575. return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
  576. },
  577. val2: function (separator) {
  578. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  579. 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)");
  580. },
  581. val1pre: new RegExp("[01]"),
  582. val1: new RegExp("0[1-9]|1[012]")
  583. },
  584. leapday: "02/29/",
  585. onKeyDown: function (e, buffer, caretPos, opts) {
  586. var $input = $(this);
  587. if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
  588. var today = new Date();
  589. $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
  590. $input.trigger("setvalue");
  591. }
  592. }
  593. },
  594. "hh:mm t": {
  595. mask: "h:s t\\m",
  596. placeholder: "hh:mm xm",
  597. alias: "datetime",
  598. hourFormat: "12"
  599. },
  600. "h:s t": {
  601. mask: "h:s t\\m",
  602. placeholder: "hh:mm xm",
  603. alias: "datetime",
  604. hourFormat: "12"
  605. },
  606. "hh:mm:ss": {
  607. mask: "h:s:s",
  608. placeholder: "hh:mm:ss",
  609. alias: "datetime",
  610. autoUnmask: false
  611. },
  612. "hh:mm": {
  613. mask: "h:s",
  614. placeholder: "hh:mm",
  615. alias: "datetime",
  616. autoUnmask: false
  617. },
  618. "date": {
  619. alias: "dd/mm/yyyy" // "mm/dd/yyyy"
  620. },
  621. "mm/yyyy": {
  622. mask: "1/y",
  623. placeholder: "mm/yyyy",
  624. leapday: "donotuse",
  625. separator: "/",
  626. alias: "mm/dd/yyyy"
  627. },
  628. "shamsi": {
  629. regex: {
  630. val2pre: function (separator) {
  631. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  632. return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
  633. },
  634. val2: function (separator) {
  635. var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
  636. return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
  637. },
  638. val1pre: new RegExp("[01]"),
  639. val1: new RegExp("0[1-9]|1[012]")
  640. },
  641. yearrange: {
  642. minyear: 1300,
  643. maxyear: 1499
  644. },
  645. mask: "y/1/2",
  646. leapday: "/12/30",
  647. placeholder: "yyyy/mm/dd",
  648. alias: "mm/dd/yyyy",
  649. clearIncomplete: true
  650. }
  651. });
  652. return Inputmask;
  653. }));