浏览代码

Fix to escape special character such as optional marker, quantifiable marker, alternator marker, backslash and so on.

zesky 10 年之前
父节点
当前提交
2a53584a37

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.1.64-75",
+  "version": "3.1.64-76",
   "main": [
     "./dist/inputmask/jquery.inputmask.js",
     "./dist/inputmask/jquery.inputmask.extensions.js",

+ 1 - 1
component.json

@@ -2,7 +2,7 @@
     "name": "jquery_inputmask",
     "repository": "robinherbots/jquery.inputmask",
     "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-    "version": "3.1.64-75",
+    "version": "3.1.64-76",
     "keywords": [ "jquery", "plugins", "input", "form", "inputmask", "mask" ],
     "main": "./dist/jquery.inputmask.bundle.js",
     "scripts": [

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
     "name": "robinherbots/jquery.inputmask",
     "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-	"version": "3.1.64-75",
+	"version": "3.1.64-76",
     "type": "library",
     "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
     "homepage": "http://robinherbots.github.io/jquery.inputmask",

+ 1 - 1
dist/inputmask/inputmask.date.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.date.extensions.min.js


+ 1 - 1
dist/inputmask/inputmask.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.extensions.min.js


+ 20 - 19
dist/inputmask/inputmask.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery")) : factory(jQuery);
@@ -99,8 +99,20 @@
                     mask: element
                 }), escaped = !1;
             }
-            for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})\??|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new maskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) switch (m = match[0], 
-            m.charAt(0)) {
+            function maskStaticGroupMarker(lastMatch) {
+                lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
+                insertTestDefinition(lastMatch, opts.groupmarker.end));
+            }
+            function maskCurrentToken(m, currentToken, lastMatch) {
+                currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
+                maskStaticGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
+            }
+            for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})\??|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new maskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], 
+            escaped) maskCurrentToken(m, currentToken, lastMatch); else switch (m.charAt(0)) {
+              case opts.escapeChar:
+                escaped = !0;
+                break;
+
               case opts.optionalmarker.end:
               case opts.groupmarker.end:
                 if (openingToken = openenings.pop(), openenings.length > 0) {
@@ -145,10 +157,6 @@
                 }
                 break;
 
-              case opts.escapeChar:
-                escaped = !0;
-                break;
-
               case opts.alternatormarker:
                 openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
                 lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), 
@@ -159,22 +167,17 @@
               default:
                 if (openenings.length > 0) {
                     if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.length > 0 && !currentOpeningToken.isAlternator && (lastMatch = currentOpeningToken.matches[currentOpeningToken.matches.length - 1], 
-                    lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
-                    insertTestDefinition(lastMatch, opts.groupmarker.end))), insertTestDefinition(currentOpeningToken, m), 
+                    maskStaticGroupMarker(lastMatch)), insertTestDefinition(currentOpeningToken, m), 
                     currentOpeningToken.isAlternator) {
                         alternator = openenings.pop();
                         for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
                         openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
                         currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
                     }
-                } else currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
-                lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
-                insertTestDefinition(lastMatch, opts.groupmarker.end))), insertTestDefinition(currentToken, m);
+                } else maskCurrentToken(m, currentToken, lastMatch);
             }
             return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
-            lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
-            insertTestDefinition(lastMatch, opts.groupmarker.end)), maskTokens.push(currentToken)), 
-            maskTokens;
+            maskStaticGroupMarker(lastMatch), maskTokens.push(currentToken)), maskTokens;
         }
         function generateMask(mask, metadata) {
             if (void 0 == mask || "" == mask) return void 0;
@@ -732,10 +735,8 @@
         function isComplete(buffer) {
             if ($.isFunction(opts.isComplete)) return opts.isComplete.call($el, buffer, opts);
             if ("*" == opts.repeat) return void 0;
-            {
-                var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
-                getLastValidPosition();
-            }
+            var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
+            getLastValidPosition();
             if (void 0 == lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
                 complete = !0;
                 for (var i = 0; aml >= i; i++) {

文件差异内容过多而无法显示
+ 2 - 2
dist/inputmask/inputmask.min.js


+ 4 - 1
dist/inputmask/inputmask.numeric.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);
@@ -386,6 +386,9 @@
             suffix: " %",
             allowPlus: !1,
             allowMinus: !1
+        },
+        numeric2: {
+            alias: "numeric"
         }
     }), inputmask;
 });

文件差异内容过多而无法显示
+ 2 - 2
dist/inputmask/inputmask.numeric.extensions.min.js


+ 1 - 1
dist/inputmask/inputmask.phone.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.phone.extensions.min.js


+ 1 - 1
dist/inputmask/inputmask.regex.extensions.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/inputmask.regex.extensions.min.js


+ 1 - 1
dist/inputmask/jquery.inputmask.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "./inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery);

文件差异内容过多而无法显示
+ 1 - 1
dist/inputmask/jquery.inputmask.min.js


+ 23 - 19
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.1.64-75
+* Version: 3.1.64-76
 */
 !function($) {
     function inputmask(options) {
@@ -97,8 +97,20 @@
                     mask: element
                 }), escaped = !1;
             }
-            for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})\??|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new maskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) switch (m = match[0], 
-            m.charAt(0)) {
+            function maskStaticGroupMarker(lastMatch) {
+                lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
+                insertTestDefinition(lastMatch, opts.groupmarker.end));
+            }
+            function maskCurrentToken(m, currentToken, lastMatch) {
+                currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
+                maskStaticGroupMarker(lastMatch)), insertTestDefinition(currentToken, m);
+            }
+            for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})\??|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new maskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], 
+            escaped) maskCurrentToken(m, currentToken, lastMatch); else switch (m.charAt(0)) {
+              case opts.escapeChar:
+                escaped = !0;
+                break;
+
               case opts.optionalmarker.end:
               case opts.groupmarker.end:
                 if (openingToken = openenings.pop(), openenings.length > 0) {
@@ -143,10 +155,6 @@
                 }
                 break;
 
-              case opts.escapeChar:
-                escaped = !0;
-                break;
-
               case opts.alternatormarker:
                 openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
                 lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), 
@@ -157,22 +165,17 @@
               default:
                 if (openenings.length > 0) {
                     if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.length > 0 && !currentOpeningToken.isAlternator && (lastMatch = currentOpeningToken.matches[currentOpeningToken.matches.length - 1], 
-                    lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
-                    insertTestDefinition(lastMatch, opts.groupmarker.end))), insertTestDefinition(currentOpeningToken, m), 
+                    maskStaticGroupMarker(lastMatch)), insertTestDefinition(currentOpeningToken, m), 
                     currentOpeningToken.isAlternator) {
                         alternator = openenings.pop();
                         for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
                         openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], 
                         currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
                     }
-                } else currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
-                lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
-                insertTestDefinition(lastMatch, opts.groupmarker.end))), insertTestDefinition(currentToken, m);
+                } else maskCurrentToken(m, currentToken, lastMatch);
             }
             return currentToken.matches.length > 0 && (lastMatch = currentToken.matches[currentToken.matches.length - 1], 
-            lastMatch.isGroup && (lastMatch.isGroup = !1, insertTestDefinition(lastMatch, opts.groupmarker.start, 0), 
-            insertTestDefinition(lastMatch, opts.groupmarker.end)), maskTokens.push(currentToken)), 
-            maskTokens;
+            maskStaticGroupMarker(lastMatch), maskTokens.push(currentToken)), maskTokens;
         }
         function generateMask(mask, metadata) {
             if (void 0 == mask || "" == mask) return void 0;
@@ -730,10 +733,8 @@
         function isComplete(buffer) {
             if ($.isFunction(opts.isComplete)) return opts.isComplete.call($el, buffer, opts);
             if ("*" == opts.repeat) return void 0;
-            {
-                var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
-                getLastValidPosition();
-            }
+            var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
+            getLastValidPosition();
             if (void 0 == lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
                 complete = !0;
                 for (var i = 0; aml >= i; i++) {
@@ -2325,6 +2326,9 @@
             suffix: " %",
             allowPlus: !1,
             allowMinus: !1
+        },
+        numeric2: {
+            alias: "numeric"
         }
     }), inputmask;
 }(jQuery), function($) {

文件差异内容过多而无法显示
+ 3 - 3
dist/jquery.inputmask.bundle.min.js


+ 27 - 22
js/inputmask.js

@@ -400,6 +400,22 @@
 				}
 			}
 
+			function maskStaticGroupMarker(lastMatch){
+				if (lastMatch["isGroup"]) { //this is not a group but a normal mask => convert
+					lastMatch.isGroup = false;
+					insertTestDefinition(lastMatch, opts.groupmarker.start, 0);
+					insertTestDefinition(lastMatch, opts.groupmarker.end);
+				}
+			}
+
+			function maskCurrentToken(m, currentToken, lastMatch){
+				if (currentToken.matches.length > 0) {
+					lastMatch = currentToken.matches[currentToken.matches.length - 1];
+					maskStaticGroupMarker(lastMatch);
+				}
+				insertTestDefinition(currentToken, m);
+			}
+
 			var currentToken = new maskToken(),
 				match,
 				m,
@@ -412,7 +428,15 @@
 
 			while (match = tokenizer.exec(mask)) {
 				m = match[0];
+				if(escaped){
+					maskCurrentToken(m, currentToken, lastMatch);
+					continue;
+				}
+
 				switch (m.charAt(0)) {
+					case opts.escapeChar:
+						escaped = true;
+						break;
 					case opts.optionalmarker.end:
 						// optional closing
 					case opts.groupmarker.end:
@@ -481,9 +505,6 @@
 							currentToken.matches.push(quantifier);
 						}
 						break;
-					case opts.escapeChar:
-						escaped = true;
-						break;
 					case opts.alternatormarker:
 						if (openenings.length > 0) {
 							currentOpeningToken = openenings[openenings.length - 1];
@@ -504,11 +525,7 @@
 							currentOpeningToken = openenings[openenings.length - 1];
 							if (currentOpeningToken.matches.length > 0 && !currentOpeningToken.isAlternator) {
 								lastMatch = currentOpeningToken.matches[currentOpeningToken.matches.length - 1];
-								if (lastMatch["isGroup"]) { //this is not a group but a normal mask => convert
-									lastMatch.isGroup = false;
-									insertTestDefinition(lastMatch, opts.groupmarker.start, 0);
-									insertTestDefinition(lastMatch, opts.groupmarker.end);
-								}
+								maskStaticGroupMarker(lastMatch);
 							}
 							insertTestDefinition(currentOpeningToken, m);
 							if (currentOpeningToken.isAlternator) { //handle alternator a | b case
@@ -524,26 +541,14 @@
 								}
 							}
 						} else {
-							if (currentToken.matches.length > 0) {
-								lastMatch = currentToken.matches[currentToken.matches.length - 1];
-								if (lastMatch["isGroup"]) { //this is not a group but a normal mask => convert
-									lastMatch.isGroup = false;
-									insertTestDefinition(lastMatch, opts.groupmarker.start, 0);
-									insertTestDefinition(lastMatch, opts.groupmarker.end);
-								}
-							}
-							insertTestDefinition(currentToken, m);
+							maskCurrentToken(m, currentToken, lastMatch);
 						}
 				}
 			}
 
 			if (currentToken.matches.length > 0) {
 				lastMatch = currentToken.matches[currentToken.matches.length - 1];
-				if (lastMatch["isGroup"]) { //this is not a group but a normal mask => convert
-					lastMatch.isGroup = false;
-					insertTestDefinition(lastMatch, opts.groupmarker.start, 0);
-					insertTestDefinition(lastMatch, opts.groupmarker.end);
-				}
+				maskStaticGroupMarker(lastMatch);
 				maskTokens.push(currentToken);
 			}
 

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.1.64-75",
+  "version": "3.1.64-76",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
   "main": "./dist/inputmask/jquery.inputmask.js",
   "files": [

+ 1 - 0
qunit/qunit.html

@@ -28,5 +28,6 @@
   <script src="./tests_optional.js"></script>
   <script src="./tests_phone.js"></script>
   <script src="./tests_regex.js"></script>
+  <script src="./tests_escape.js"></script>
 </body>
 </html>

+ 86 - 0
qunit/tests_escape.js

@@ -0,0 +1,86 @@
+module("Escape character");
+
+test("inputmask(\"9\\|9\")", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    var input = $("#testmask");
+    input.inputmask("9\\|9");
+
+    input[0].focus();
+
+    input.Type("23");
+    equal(input.val(), "2|3", "Result " + input.val());
+
+    input.remove();
+});
+
+test("inputmask(\"9\\[9\\]\")", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    var input = $("#testmask");
+    input.inputmask("9\\[9\\]");
+
+    input[0].focus();
+
+    input.Type("23");
+    equal(input.val(), "2[3]", "Result " + input.val());
+
+    input.remove();
+});
+
+test("inputmask(\"9\\\\9\")", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    var input = $("#testmask");
+    input.inputmask("9\\\\9");
+
+    input[0].focus();
+
+    input.Type("23");
+    equal(input.val(), "2\\3", "Result " + input.val());
+
+    input.remove();
+});
+
+test("inputmask(\"9\\{9\\}\")", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    var input = $("#testmask");
+    input.inputmask("9\\{9\\}");
+
+    input[0].focus();
+
+    input.Type("23");
+    equal(input.val(), "2{3}", "Result " + input.val());
+
+    input.remove();
+});
+
+test("inputmask(\"9\\(9\\)\")", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    var input = $("#testmask");
+    input.inputmask("9\\(9\\)");
+
+    input[0].focus();
+
+    input.Type("23");
+    equal(input.val(), "2(3)", "Result " + input.val());
+
+    input.remove();
+});
+
+
+test("inputmask(\"9\\?9\")", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    var input = $("#testmask");
+    input.inputmask("9\\?9");
+
+    input[0].focus();
+
+    input.Type("23");
+    equal(input.val(), "2?3", "Result " + input.val());
+
+    input.remove();
+});