jquery.inputmask.numeric.extentions.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. definitions: {
  17. '9': {
  18. validator: function(chrs, buffer, pos, strict, opts) {
  19. var isValid = opts.definitions['9'].regex.test(chrs);
  20. if(isValid){
  21. //do some grouping
  22. }
  23. return isValid;
  24. },
  25. cardinality: 1,
  26. regex: new RegExp("[0-9]")
  27. }
  28. }
  29. });
  30. $.extend($.inputmask.defaults.aliases, {
  31. 'decimal': {
  32. mask: "~",
  33. placeholder: "",
  34. repeat: 10,
  35. greedy: false,
  36. numericInput: true,
  37. regex: {
  38. number: function(radixPoint, digits) { return new RegExp("^[\+\\d\-]{1}\\d*[" + radixPoint + "]?\\d" + digits + "$"); }
  39. },
  40. onKeyDown: function(e, opts) {
  41. var $input = $(this), input = this;
  42. if (e.keyCode == opts.keyCode.TAB) {
  43. var nptStr = input._valueGet();
  44. var radixPosition = nptStr.indexOf(opts.radixPoint[opts.radixPoint.length -1]);
  45. if(radixPosition != -1){
  46. for(var i = 1; i < opts.digits; i++) {
  47. if(nptStr[radixPosition + i]) nptStr = nptStr + "0";
  48. }
  49. $input.val(nptStr);
  50. }
  51. }
  52. },
  53. definitions: {
  54. '~': { //real number
  55. validator: function(chrs, buffer, pos, strict, opts) {
  56. function digitExpression() {
  57. return isNaN(opts.digits) ? opts.digits : '{0,' + opts.digits + '}';
  58. }
  59. var cbuf = buffer.slice();
  60. cbuf.splice(pos, 0, chrs);
  61. var bufferStr = cbuf.join('');
  62. var isValid = opts.regex.number(opts.radixPoint, digitExpression()).test(bufferStr);
  63. if (!isValid) {
  64. if (strict) { //shiftL & shiftR use strict only validate from 0 to position
  65. var cbuf = buffer.slice(0, pos);
  66. cbuf.splice(pos, 0, chrs);
  67. var bufferStr = cbuf.join('');
  68. var isValid = opts.regex.number(opts.radixPoint, digitExpression()).test(bufferStr);
  69. }
  70. else {
  71. if (bufferStr == opts.radixPoint) {
  72. isValid = opts.regex.number(opts.radixPoint, digitExpression()).test("0" + bufferStr);
  73. if (isValid) {
  74. buffer[pos] = "0";
  75. pos++;
  76. return pos;
  77. }
  78. }
  79. }
  80. }
  81. //todo grouping, radixpoint positioning
  82. return isValid;
  83. },
  84. cardinality: 1,
  85. prevalidator: null
  86. }
  87. },
  88. insertMode: true
  89. },
  90. 'non-negative-decimal': {
  91. regex: {
  92. number: function(radixPoint, digits) { return new RegExp("^\\d+[" + radixPoint + "]?\\d" + digits + "$"); }
  93. },
  94. alias: "decimal"
  95. },
  96. 'integer': {
  97. regex: {
  98. number: function() { return new RegExp("^([\+\-]?\\d*)$"); }
  99. },
  100. alias: "decimal"
  101. }
  102. });
  103. })(jQuery);