jquery.inputmask.numeric.extentions.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. Input Mask plugin extentions
  3. http://github.com/RobinHerbots/jquery.inputmask
  4. Copyright (c) 2010 - 2012 Robin Herbots
  5. Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
  6. Version: 1.0.2
  7. Optional extentions on the jquery.inputmask base
  8. */
  9. (function($) {
  10. //number aliases
  11. $.extend($.inputmask.defaults, {
  12. radixPoint: "\.", // | ","
  13. digits: "*", //numer of digits
  14. groupSeparator: ",", // | "\."
  15. groupSize: 3,
  16. autoGroup: false,
  17. definitions: {
  18. '9': {
  19. validator: function(chrs, buffer, pos, strict, opts) {
  20. var isValid = opts.definitions['9'].regex.test(chrs);
  21. if(isValid){
  22. //do some grouping
  23. }
  24. return isValid;
  25. },
  26. cardinality: 1,
  27. regex: new RegExp("[0-9]")
  28. }
  29. }
  30. });
  31. $.extend($.inputmask.defaults.aliases, {
  32. 'decimal': {
  33. mask: "~",
  34. placeholder: "",
  35. repeat: 10,
  36. greedy: false,
  37. numericInput: true,
  38. regex: {
  39. number: function(radixPoint, digits) { return new RegExp("^[\+\\d\-]{1}\\d*[" + radixPoint + "]?\\d" + digits + "$"); }
  40. },
  41. onKeyDown: function(e, opts) {
  42. var $input = $(this), input = this;
  43. if (e.keyCode == opts.keyCode.TAB) {
  44. var nptStr = input._valueGet();
  45. var radixPosition = nptStr.indexOf(opts.radixPoint[opts.radixPoint.length -1]);
  46. if(radixPosition != -1){
  47. for(var i = 1; i < opts.digits; i++) {
  48. if(nptStr[radixPosition + i]) nptStr = nptStr + "0";
  49. }
  50. $input.val(nptStr);
  51. }
  52. }
  53. },
  54. definitions: {
  55. '~': { //real number
  56. validator: function(chrs, buffer, pos, strict, opts) {
  57. function digitExpression() {
  58. return isNaN(opts.digits) ? opts.digits : '{0,' + opts.digits + '}';
  59. }
  60. var cbuf = buffer.slice();
  61. cbuf.splice(pos, 0, chrs);
  62. var bufferStr = cbuf.join('');
  63. var isValid = opts.regex.number(opts.radixPoint, digitExpression()).test(bufferStr);
  64. if (!isValid) {
  65. if (strict) { //shiftL & shiftR use strict only validate from 0 to position
  66. var cbuf = buffer.slice(0, pos);
  67. cbuf.splice(pos, 0, chrs);
  68. var bufferStr = cbuf.join('');
  69. var isValid = opts.regex.number(opts.radixPoint, digitExpression()).test(bufferStr);
  70. }
  71. else {
  72. if (bufferStr == opts.radixPoint) {
  73. isValid = opts.regex.number(opts.radixPoint, digitExpression()).test("0" + bufferStr);
  74. if (isValid) {
  75. buffer[pos] = "0";
  76. pos++;
  77. return pos;
  78. }
  79. }
  80. }
  81. }
  82. //todo grouping, radixpoint positioning
  83. return isValid;
  84. },
  85. cardinality: 1,
  86. prevalidator: null
  87. }
  88. },
  89. insertMode: true
  90. },
  91. 'non-negative-decimal': {
  92. regex: {
  93. number: function(radixPoint, digits) { return new RegExp("^\\d+[" + radixPoint + "]?\\d" + digits + "$"); }
  94. },
  95. alias: "decimal"
  96. },
  97. 'integer': {
  98. regex: {
  99. number: function() { return new RegExp("^([\+\-]?\\d*)$"); }
  100. },
  101. alias: "decimal"
  102. }
  103. });
  104. })(jQuery);