浏览代码

dynamic syntax working for greedy static masks

Robin Herbots 12 年之前
父节点
当前提交
8771768b14
共有 2 个文件被更改,包括 43 次插入10 次删除
  1. 17 6
      js/jquery.inputmask.js
  2. 26 4
      qunit/tests.js

+ 17 - 6
js/jquery.inputmask.js

@@ -111,11 +111,24 @@
                             else quantifier.quantifier = { min: mq[0], max: mq[1] };
 
                             if (openenings.length > 0) {
-                                openenings[openenings.length - 1]["matches"].push(quantifier);
+                                var matches = openenings[openenings.length - 1]["matches"];
+                                var match = matches.pop();
+                                if (!match["isGroup"]) {
+                                    var groupToken = new maskToken(true);
+                                    groupToken.matches.push(match);
+                                    match = groupToken;
+                                }
+                                matches.push(match);
+                                matches.push(quantifier);
                             } else {
+                                var match = currentToken.matches.pop();
+                                if (!match["isGroup"]) {
+                                    var groupToken = new maskToken(true);
+                                    groupToken.matches.push(match);
+                                    match = groupToken;
+                                }
+                                currentToken.matches.push(match);
                                 currentToken.matches.push(quantifier);
-                                maskTokens.push(currentToken);
-                                currentToken = new maskToken();
                             }
                             break;
                         case opts.escapeChar:
@@ -329,7 +342,6 @@
                             testLocator = testLocator.concat(loopNdx);
                             return match;
                         } else if (match.matches != undefined) {
-                            //do stuff
                             if (match.isGroup && quantifierRecurse !== true) { //when a group pass along to the quantifier
                                 match = handleMatch(maskToken.matches[tndx + 1], loopNdx);
                                 if (match) return match;
@@ -350,11 +362,10 @@
                                 if (match)
                                     return match;
                             }
-                            //  testPos++;
                         } else testPos++;
                     }
 
-                    for (var tndx = (ndxInitializer.length > 0 && quantifierRecurse !== true ? ndxInitializer.shift() : 0) ; tndx < maskToken.matches.length ; tndx++) {
+                    for (var tndx = (ndxInitializer.length > 0 ? ndxInitializer.shift() : 0) ; tndx < maskToken.matches.length ; tndx++) {
                         if (maskToken.matches[tndx]["isQuantifier"] !== true) {
                             var match = handleMatch(maskToken.matches[tndx], [tndx].concat(loopNdx), quantifierRecurse);
                             if (match && testPos == pos) {

+ 26 - 4
qunit/tests.js

@@ -1815,27 +1815,49 @@ test("inputmask(\"ip\" - 192.168.1.100", function () {
 
 module("Value formatting");
 test("$.inputmask.format(\"2331973\", { alias: \"date\"})", function () {
-    var formattedValue =$.inputmask.format("2331973", { alias: "date"});
+    var formattedValue = $.inputmask.format("2331973", { alias: "date" });
     equal(formattedValue, "23/03/1973", "Result " + formattedValue);
 });
 
 test("$.inputmask.format(\"016501030020001DE1015170\", { mask: \"99 999 999 999 9999 \\D\\E*** 9999\"})", function () {
-    var formattedValue =$.inputmask.format("016501030020001DE1015170", { mask: "99 999 999 999 9999 \\D\\E*** 9999"});
+    var formattedValue = $.inputmask.format("016501030020001DE1015170", { mask: "99 999 999 999 9999 \\D\\E*** 9999" });
     equal(formattedValue, "01 650 103 002 0001 DE101 5170", "Result " + formattedValue);
 });
 
 module("Value Validating");
 test("$.inputmask.isValid(\"23/03/1973\", { alias: \"date\"})", function () {
-    var formattedValue =$.inputmask.isValid("23/03/1973", { alias: "date"});
+    var formattedValue = $.inputmask.isValid("23/03/1973", { alias: "date" });
     equal(formattedValue, true, "Result " + formattedValue);
 });
 
 test("$.inputmask.isValid(\"01 650 103 002 0001 DE101 5170\", { mask: \"99 999 999 999 9999 \\D\\E*** 9999\"})", function () {
-    var formattedValue =$.inputmask.isValid("01 650 103 002 0001 DE101 5170", { mask: "99 999 999 999 9999 \\D\\E*** 9999"});
+    var formattedValue = $.inputmask.isValid("01 650 103 002 0001 DE101 5170", { mask: "99 999 999 999 9999 \\D\\E*** 9999" });
     equal(formattedValue, true, "Result " + formattedValue);
 });
 
 module("Dynamic Masks");
+test("inputmask(\"9-a{3}9{3}\" - simple dynamic mask", function () {
+    $('body').append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("9-a{3}9{3}")
+
+    $("#testmask")[0].focus();
+    $("#testmask").Type("1abc123");
+
+    equal($("#testmask").val(), "1-abc123", "Result " + $("#testmask").val());
+
+    $("#testmask").remove();
+});
+test("inputmask(\"9-a{1,3}9{1,3}\" - simple dynamic mask", function () {
+    $('body').append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("9-a{3}9{3}")
+
+    $("#testmask")[0].focus();
+    $("#testmask").Type("1a1");
+
+    equal($("#testmask").val(), "1-a1", "Result " + $("#testmask").val());
+
+    $("#testmask").remove();
+});
 test("inputmask(\"*{1,20}@*{1,20}.*{2,6}[.*{2}]\" - email mask", function () {
     $('body').append('<input type="text" id="testmask" />');
     $("#testmask").inputmask("*{1,20}@*{1,20}.*{2,6}[.*{2}]")