jquery.inputmask.extentions.js 17 KB

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