inputmask.date.extensions.js 19 KB

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