jquery.inputmask.extentions.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. /*
  2. Input Mask plugin extentions
  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.7
  7. Optional extentions on the jquery.inputmask base
  8. */
  9. (function($) {
  10. //extra definitions
  11. $.extend($.inputmask.defaults.definitions, {
  12. 'A': { //auto uppercasing
  13. validator: "[A-Za-z]",
  14. cardinality: 1,
  15. casing: "upper"
  16. }
  17. });
  18. //date & time aliases
  19. $.extend($.inputmask.defaults.definitions, {
  20. 'h': { //hours
  21. validator: "[01][0-9]|2[0-3]",
  22. cardinality: 2,
  23. prevalidator: [{ validator: "[0-2]", cardinality: 1}]
  24. },
  25. 's': { //seconds || minutes
  26. validator: "[0-5][0-9]",
  27. cardinality: 2,
  28. prevalidator: [{ validator: "[0-5]", cardinality: 1}]
  29. },
  30. 'd': { //basic day
  31. validator: "0[1-9]|[12][0-9]|3[01]",
  32. cardinality: 2,
  33. prevalidator: [{ validator: "[0-3]", cardinality: 1}]
  34. },
  35. 'm': { //basic month
  36. validator: "0[1-9]|1[012]",
  37. cardinality: 2,
  38. prevalidator: [{ validator: "[01]", cardinality: 1}]
  39. },
  40. 'y': { //basic year
  41. validator: "(19|20)\\d{2}",
  42. cardinality: 4,
  43. prevalidator: [
  44. { validator: "[12]", cardinality: 1 },
  45. { validator: "(19|20)", cardinality: 2 },
  46. { validator: "(19|20)\\d", cardinality: 3 }
  47. ]
  48. }
  49. });
  50. $.extend($.inputmask.defaults.aliases, {
  51. 'dd/mm/yyyy': {
  52. mask: "d/m/y",
  53. placeholder: "dd/mm/yyyy",
  54. regex: {
  55. monthpre: new RegExp("[01]"),
  56. month: new RegExp("((0[1-9]|[12][0-9])\/(0[1-9]|1[012]))|(30\/(0[13-9]|1[012]))|(31\/(0[13578]|1[02]))"),
  57. yearpre1: new RegExp("[12]"),
  58. year: new RegExp("(19|20)\\d{2}"),
  59. daypre: new RegExp("[0-3]"),
  60. day: new RegExp("0[1-9]|[12][0-9]|3[01]")
  61. },
  62. leapday: "29/02/",
  63. onKeyUp: function(e, opts) {
  64. var $input = $(this), input = this;
  65. if (e.keyCode == opts.keyCode.TAB) {
  66. var nptStr = input._valueGet();
  67. //do stuff
  68. } else if(e.ctrlKey && e.keyCode == opts.keyCode.RIGHT){
  69. var today = new Date();
  70. $input.val(today.getDate().toString() + (today.getMonth()+1).toString() + today.getFullYear().toString());
  71. }
  72. },
  73. definitions: {
  74. 'd': { //day
  75. validator: function(chrs, buffer, pos, strict, opts) {
  76. var isValid = opts.regex.day.test(chrs);
  77. if (!strict && !isValid) {
  78. if (chrs.charAt(1) == '/') {
  79. isValid = opts.regex.day.test("0" + chrs.charAt(0));
  80. if (isValid) {
  81. buffer[pos - 1] = "0";
  82. buffer[pos] = chrs.charAt(0);
  83. pos++;
  84. return pos;
  85. }
  86. }
  87. }
  88. return isValid;
  89. },
  90. cardinality: 2,
  91. prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
  92. var isValid = opts.regex.daypre.test(chrs);
  93. if (!strict && !isValid) {
  94. isValid = opts.regex.day.test("0" + chrs);
  95. if (isValid) {
  96. buffer[pos] = "0";
  97. pos++;
  98. return pos;
  99. }
  100. }
  101. return isValid;
  102. }, cardinality: 1}]
  103. },
  104. 'm': { //month
  105. validator: function(chrs, buffer, pos, strict, opts) {
  106. var dayValue = buffer.join('').substr(0, 3);
  107. var isValid = opts.regex.month.test(dayValue + chrs);
  108. if (!strict && !isValid) {
  109. if (chrs.charAt(1) == '/') {
  110. isValid = opts.regex.month.test(dayValue + "0" + chrs.charAt(0));
  111. if (isValid) {
  112. buffer[pos - 1] = "0";
  113. buffer[pos] = chrs.charAt(0);
  114. pos++;
  115. return pos;
  116. }
  117. }
  118. }
  119. return isValid;
  120. },
  121. cardinality: 2,
  122. prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
  123. var isValid = opts.regex.monthpre.test(chrs);
  124. if (!strict && !isValid) {
  125. var dayValue = buffer.join('').substr(0, 3);
  126. isValid = opts.regex.month.test(dayValue + "0" + chrs);
  127. if (isValid) {
  128. buffer[pos] = "0";
  129. pos++;
  130. return pos;
  131. }
  132. }
  133. return isValid;
  134. }, cardinality: 1}]
  135. },
  136. 'y': { //year
  137. validator: function(chrs, buffer, pos, strict, opts) {
  138. if (opts.regex.year.test(chrs)) {
  139. var dayMonthValue = buffer.join('').substr(0, 6);
  140. if (dayMonthValue != opts.leapday)
  141. return true;
  142. else {
  143. var year = parseInt(chrs); //detect leap year
  144. if (year % 4 == 0)
  145. if (year % 100 == 0)
  146. if (year % 400 == 0)
  147. return true;
  148. else return false;
  149. else return true;
  150. else return false;
  151. }
  152. } else return false;
  153. },
  154. cardinality: 4,
  155. prevalidator: [
  156. { validator: function(chrs, buffer, pos, strict, opts) {
  157. var isValid = opts.regex.yearpre1.test(chrs);
  158. if (!strict && !isValid) {
  159. var yearPrefix = (new Date()).getFullYear().toString().slice(0,2);
  160. isValid = opts.regex.yearpre1.test(yearPrefix + chrs);
  161. if (isValid) {
  162. buffer[pos++] = yearPrefix[0];
  163. buffer[pos++] = yearPrefix[1];
  164. return pos;
  165. }
  166. }
  167. return isValid;
  168. }
  169. , cardinality: 1 },
  170. { validator: "(19|20)", cardinality: 2 },
  171. { validator: "(19|20)\\d", cardinality: 3 }
  172. ]
  173. }
  174. },
  175. insertMode: false,
  176. autoUnmask: false
  177. },
  178. 'mm/dd/yyyy': {
  179. mask: "m/d/y",
  180. placeholder: "mm/dd/yyyy",
  181. regex: {
  182. day: new RegExp("((0[1-9]|1[012])\/(0[1-9]|[12][0-9]))|((0[13-9]|1[012])\/30)|((0[13578]|1[02])\/31)"),
  183. daypre: new RegExp("((0[13-9]|1[012])\/[0-3])|(02\/[0-2])"),
  184. month: new RegExp("0[1-9]|1[012]"),
  185. monthpre: new RegExp("[01]"),
  186. yearpre1: new RegExp("[12]"),
  187. year: new RegExp("(19|20)\\d{2}")
  188. },
  189. leapday: "02/29/",
  190. onKeyUp: function(e, opts) {
  191. var $input = $(this), input = this;
  192. if (e.keyCode == opts.keyCode.TAB) {
  193. var nptStr = input._valueGet();
  194. //do stuff
  195. } else if(e.ctrlKey && e.keyCode == opts.keyCode.RIGHT){
  196. var today = new Date();
  197. $input.val((today.getMonth()+1).toString() + today.getDate().toString() + today.getFullYear().toString());
  198. }
  199. },
  200. definitions: {
  201. 'd': { //day
  202. validator: function(chrs, buffer, pos, strict, opts) {
  203. var monthValue = buffer.join('').substr(0, 3);
  204. var isValid = opts.regex.day.test(monthValue + chrs);
  205. if (!strict && !isValid) {
  206. if (chrs.charAt(1) == '/') {
  207. isValid = opts.regex.day.test(monthValue + "0" + chrs.charAt(0));
  208. if (isValid) {
  209. buffer[pos - 1] = "0";
  210. buffer[pos] = chrs.charAt(0);
  211. pos++;
  212. return pos;
  213. }
  214. }
  215. }
  216. return isValid;
  217. },
  218. cardinality: 2,
  219. prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
  220. var monthValue = buffer.join('').substr(0, 3);
  221. var isValid = opts.regex.daypre.test(monthValue + chrs);
  222. if (!strict && !isValid) {
  223. isValid = opts.regex.day.test(monthValue + "0" + chrs);
  224. if (isValid) {
  225. buffer[pos] = "0";
  226. pos++;
  227. return pos;
  228. }
  229. }
  230. return isValid;
  231. },
  232. cardinality: 1}]
  233. },
  234. 'm': { //month
  235. validator: function(chrs, buffer, pos, strict, opts) {
  236. var isValid = opts.regex.month.test(chrs);
  237. if (!strict && !isValid) {
  238. if (chrs.charAt(1) == '/') {
  239. isValid = opts.regex.month.test("0" + chrs.charAt(0));
  240. if (isValid) {
  241. buffer[pos - 1] = "0";
  242. buffer[pos] = chrs.charAt(0);
  243. pos++;
  244. return pos;
  245. }
  246. }
  247. }
  248. return isValid;
  249. },
  250. cardinality: 2,
  251. prevalidator: [{ validator: function(chrs, buffer, pos, strict, opts) {
  252. var isValid = opts.regex.monthpre.test(chrs);
  253. if (!strict && !isValid) {
  254. isValid = opts.regex.month.test("0" + chrs);
  255. if (isValid) {
  256. buffer[pos] = "0";
  257. pos++;
  258. return pos;
  259. }
  260. }
  261. return isValid;
  262. }, cardinality: 1}]
  263. },
  264. 'y': { //year
  265. validator: function(chrs, buffer, pos, strict, opts) {
  266. if (opts.regex.year.test(chrs)) {
  267. var monthDayValue = buffer.join('').substr(0, 6);
  268. if (monthDayValue != opts.leapday)
  269. return true;
  270. else {
  271. var year = parseInt(chrs); //detect leap year
  272. if (year % 4 == 0)
  273. if (year % 100 == 0)
  274. if (year % 400 == 0)
  275. return true;
  276. else return false;
  277. else return true;
  278. else return false;
  279. }
  280. } else return false;
  281. },
  282. cardinality: 4,
  283. prevalidator: [
  284. { validator: function(chrs, buffer, pos, strict, opts) {
  285. var isValid = opts.regex.yearpre1.test(chrs);
  286. if (!strict && !isValid) {
  287. var yearPrefix = (new Date()).getFullYear().toString().slice(0,2);
  288. isValid = opts.regex.yearpre1.test(yearPrefix + chrs);
  289. if (isValid) {
  290. buffer[pos++] = yearPrefix[0];
  291. buffer[pos++] = yearPrefix[1];
  292. return pos;
  293. }
  294. }
  295. return isValid;
  296. }
  297. , cardinality: 1 },
  298. { validator: "(19|20)", cardinality: 2 },
  299. { validator: "(19|20)\\d", cardinality: 3 }
  300. ]
  301. }
  302. },
  303. insertMode: false,
  304. autoUnmask: false
  305. },
  306. 'hh:mm:ss': {
  307. mask: "h:s:s",
  308. autoUnmask: false
  309. },
  310. 'hh:mm': {
  311. mask: "h:s",
  312. autoUnmask: false
  313. },
  314. 'date': {
  315. alias: "dd/mm/yyyy" // "mm/dd/yyyy"
  316. },
  317. 'datetime': {
  318. mask: "d/m/y h:s",
  319. placeholder: "dd/mm/yyyy hh:mm",
  320. alias: "date"
  321. }
  322. });
  323. //number aliases
  324. $.extend($.inputmask.defaults, {
  325. radixPoint: "\.", // | ","
  326. digits: "*", //numer of digits
  327. groupSeparator: ",", // | "\."
  328. groupSize: 3
  329. });
  330. $.extend($.inputmask.defaults.aliases, {
  331. 'decimal': {
  332. mask: "~",
  333. placeholder: "",
  334. repeat: 10,
  335. greedy: false,
  336. numericInput: true,
  337. regex: {
  338. number: function(radixPoint, digits) { return new RegExp("^[\+\\d\-]{1}\\d*[" + radixPoint + "]?\\d" + digits + "$"); }
  339. },
  340. onKeyUp: function(e, opts) {
  341. var $input = $(this), input = this;
  342. if (e.keyCode == opts.keyCode.TAB) {
  343. var nptStr = input._valueGet();
  344. //do stuff
  345. }
  346. },
  347. definitions: {
  348. '~': { //real number
  349. validator: function(chrs, buffer, pos, strict, opts) {
  350. function digitExpression() {
  351. return isNaN(opts.digits) ? opts.digits : '{0,' + opts.digits + '}';
  352. }
  353. var cbuf = buffer.slice();
  354. cbuf.splice(pos, 0, chrs);
  355. var bufferStr = cbuf.join('');
  356. var isValid = opts.regex.number(opts.radixPoint, digitExpression()).test(bufferStr);
  357. if (!isValid) {
  358. if (strict) { //shiftL & shiftR use strict only validate from 0 to position
  359. var cbuf = buffer.slice(0, pos);
  360. cbuf.splice(pos, 0, chrs);
  361. var bufferStr = cbuf.join('');
  362. var isValid = opts.regex.number(opts.radixPoint, digitExpression()).test(bufferStr);
  363. }
  364. else {
  365. if (bufferStr == opts.radixPoint) {
  366. isValid = opts.regex.number(opts.radixPoint, digitExpression()).test("0" + bufferStr);
  367. if (isValid) {
  368. buffer[pos] = "0";
  369. pos++;
  370. return pos;
  371. }
  372. }
  373. }
  374. }
  375. //todo grouping, radixpoint positioning
  376. return isValid;
  377. },
  378. cardinality: 1,
  379. prevalidator: null
  380. }
  381. },
  382. insertMode: true
  383. },
  384. 'non-negative-decimal': {
  385. regex: {
  386. number: function(radixPoint, digits) { return new RegExp("^\\d+[" + radixPoint + "]?\\d" + digits + "$"); }
  387. },
  388. alias: "decimal"
  389. },
  390. 'integer': {
  391. regex: {
  392. number: function() { return new RegExp("^([\+\-]?\\d*)$"); }
  393. },
  394. alias: "decimal"
  395. }
  396. });
  397. })(jQuery);