jquery.inputmask.extentions.js 13 KB

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