jquery.inputmask.extentions.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  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.1
  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': { //day
  23. validator: "0[1-9]|[12][0-9]|3[01]",
  24. cardinality: 2,
  25. prevalidator: [{ validator: "[0-3]", cardinality: 1}]
  26. },
  27. 'm': { //month
  28. validator: "0[1-9]|1[012]",
  29. cardinality: 2,
  30. prevalidator: [{ validator: "[01]", cardinality: 1}]
  31. },
  32. 'y': { //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. regex: {
  269. 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]))"),
  270. year: new RegExp("(19|20)\\d\\d")
  271. },
  272. definitions: {
  273. 'm': { //month
  274. validator: function(chrs, buffer, pos, strict, opts) {
  275. var dayValue = buffer.join('').substr(0, 3);
  276. return opts.regex.month.test(dayValue + chrs);
  277. },
  278. cardinality: 2,
  279. prevalidator: [{ validator: "[01]", cardinality: 1}]
  280. },
  281. 'y': { //year
  282. validator: function(chrs, buffer, pos, strict, opts) {
  283. if (opts.regex.year.test(chrs)) {
  284. var dayMonthValue = buffer.join('').substr(0, 6);
  285. if (dayMonthValue != "29/02/")
  286. return true;
  287. else {
  288. var year = parseInt(chrs); //detect leap year
  289. if (year % 4 == 0)
  290. if (year % 100 == 0)
  291. if (year % 400 == 0)
  292. return true;
  293. else return false;
  294. else return true;
  295. else return false;
  296. }
  297. } else return false;
  298. },
  299. cardinality: 4,
  300. prevalidator: [
  301. { validator: "[12]", cardinality: 1 },
  302. { validator: "(19|20)", cardinality: 2 },
  303. { validator: "(19|20)\\d", cardinality: 3 }
  304. ]
  305. }
  306. },
  307. insertMode: false,
  308. autoUnmask: false
  309. },
  310. //number aliases by Dean (datimson)
  311. 'decimal': {
  312. mask: "~",
  313. placeholder: "",
  314. repeat: 10,
  315. greedy: false,
  316. radixPoint: "\.", // | ","
  317. regex: {
  318. real: function(radixPoint) { return new RegExp("^([\+\-]?[0-9]*[" + radixPoint + "]?[0-9]*)$"); }
  319. },
  320. definitions: {
  321. '~': { //real number
  322. validator: function(chrs, buffer, pos, strict, opts) {
  323. var myBuffer = buffer.slice();
  324. myBuffer.splice(pos, 0, chrs);
  325. var test = myBuffer.join('');
  326. var isValid = opts.regex.real(opts.radixPoint).test(test);
  327. return isValid;
  328. },
  329. cardinality: 1,
  330. prevalidator: null
  331. }
  332. },
  333. insertMode: true
  334. },
  335. 'non-negative-decimal': {
  336. mask: "~",
  337. placeholder: "",
  338. repeat: 10,
  339. greedy: false,
  340. radixPoint: "\.", // | ","
  341. regex: {
  342. decimal: function(radixPoint) { return new RegExp("^([0-9]+[" + radixPoint + "]?[0-9]*)$"); }
  343. },
  344. definitions: {
  345. '~': {
  346. validator: function(chrs, buffer, pos, strict, opts) {
  347. var myBuffer = buffer.slice();
  348. myBuffer.splice(pos, 0, chrs);
  349. var test = myBuffer.join('');
  350. var isValid = opts.regex.decimal(opts.radixPoint).test(test);
  351. return isValid;
  352. },
  353. cardinality: 1,
  354. prevalidator: null
  355. }
  356. },
  357. insertMode: true
  358. },
  359. 'integer': {
  360. mask: "~",
  361. placeholder: "",
  362. repeat: 10,
  363. greedy: false,
  364. numericInput: true,
  365. regex: {
  366. integer: new RegExp("^([\+\-]?[0-9]*)$")
  367. },
  368. definitions: {
  369. '~': {
  370. validator: function(chrs, buffer, pos, strict, opts) {
  371. var myBuffer = buffer.slice();
  372. myBuffer.splice(pos, 0, chrs);
  373. var test = myBuffer.join('');
  374. var isValid = opts.regex.integer.test(test);
  375. return isValid;
  376. },
  377. cardinality: 1,
  378. prevalidator: null
  379. }
  380. },
  381. insertMode: true
  382. }
  383. });
  384. })(jQuery);