Browse Source

handle ^ and $ in regex masks

Robin Herbots 5 years ago
parent
commit
56f3cf70a9
10 changed files with 34 additions and 16 deletions
  1. 2 0
      CHANGELOG.md
  2. 1 1
      bower.json
  3. 1 1
      composer.json
  4. 7 2
      dist/inputmask.js
  5. 2 2
      dist/inputmask.min.js
  6. 7 2
      dist/jquery.inputmask.js
  7. 2 2
      dist/jquery.inputmask.min.js
  8. 10 4
      lib/mask-lexer.js
  9. 1 1
      lib/validation-tests.js
  10. 1 1
      package.json

+ 2 - 0
CHANGELOG.md

@@ -6,12 +6,14 @@
 - numeric alias
     - SetMaxOnOverflow option
 ### Updates
+- handle ^ and $ in regex masks
 - datetime alias: add autofill logic to year
     - complete with current year
     - allow filled year be overtyped when min date is provided,
 - \<input-mask> enhance attribute handling
 
 ### Fixed
+- version 3.x to 4.x regex issue #1727
 - unmask regression? #2315
     - only keep significant parts when using multiple masks
 - Datetime alias 29/02/a valid year does not always allows #2286

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "5.0.4-beta.58",
+  "version": "5.0.4-beta.59",
   "main": [
 	  "./index.js",
     "./css/inputmask.css"

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
   "name": "robinherbots/inputmask",
   "description": "Inputmask is a javascript library which creates an input mask.  Inputmask can run against vanilla javascript, jQuery and jqlite.",
-  "version": "5.0.4-beta.58",
+  "version": "5.0.4-beta.59",
   "type": "library",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "homepage": "http://robinherbots.github.io/Inputmask",

+ 7 - 2
dist/inputmask.js

@@ -3,7 +3,7 @@
  * https://github.com/RobinHerbots/Inputmask
  * Copyright (c) 2010 - 2020 Robin Herbots
  * Licensed under the MIT license
- * Version: 5.0.4-beta.57
+ * Version: 5.0.4-beta.58
  */
 !function webpackUniversalModuleDefinition(root, factory) {
     if ("object" == typeof exports && "object" == typeof module) module.exports = factory(require("jqlite")); else if ("function" == typeof define && define.amd) define([ "jqlite" ], factory); else {
@@ -609,7 +609,7 @@
                 mloc: {},
                 cd: cacheDependency
             }), void 0 !== ndxIntlzr && maskset.tests[pos] ? $.extend(!0, [], matches) : (maskset.tests[pos] = $.extend(!0, [], matches), 
-            console.log(pos + " - " + JSON.stringify(matches)), maskset.tests[pos]);
+            maskset.tests[pos]);
         }
         Object.defineProperty(exports, "__esModule", {
             value: !0
@@ -1969,6 +1969,11 @@
                     break;
                 }
                 if (escaped) defaultCase(); else switch (m.charAt(0)) {
+                  case "$":
+                  case "^":
+                    regexMask || defaultCase();
+                    break;
+
                   case "(?=":
                     break;
 

File diff suppressed because it is too large
+ 2 - 2
dist/inputmask.min.js


+ 7 - 2
dist/jquery.inputmask.js

@@ -3,7 +3,7 @@
  * https://github.com/RobinHerbots/Inputmask
  * Copyright (c) 2010 - 2020 Robin Herbots
  * Licensed under the MIT license
- * Version: 5.0.4-beta.57
+ * Version: 5.0.4-beta.58
  */
 !function webpackUniversalModuleDefinition(root, factory) {
     if ("object" == typeof exports && "object" == typeof module) module.exports = factory(require("jquery")); else if ("function" == typeof define && define.amd) define([ "jquery" ], factory); else {
@@ -609,7 +609,7 @@
                 mloc: {},
                 cd: cacheDependency
             }), void 0 !== ndxIntlzr && maskset.tests[pos] ? $.extend(!0, [], matches) : (maskset.tests[pos] = $.extend(!0, [], matches), 
-            console.log(pos + " - " + JSON.stringify(matches)), maskset.tests[pos]);
+            maskset.tests[pos]);
         }
         Object.defineProperty(exports, "__esModule", {
             value: !0
@@ -1837,6 +1837,11 @@
                     break;
                 }
                 if (escaped) defaultCase(); else switch (m.charAt(0)) {
+                  case "$":
+                  case "^":
+                    regexMask || defaultCase();
+                    break;
+
                   case "(?=":
                     break;
 

File diff suppressed because it is too large
+ 2 - 2
dist/jquery.inputmask.min.js


+ 10 - 4
lib/mask-lexer.js

@@ -93,10 +93,10 @@ function generateMaskSet(opts, nocache) {
 }
 
 function analyseMask(mask, regexMask, opts) {
-	var tokenizer = /(?:[?*+]|\{[0-9+*]+(?:,[0-9+*]*)?(?:\|[0-9+*]*)?\})|[^.?*+^${[]()|\\]+|./g,
+	const tokenizer = /(?:[?*+]|\{[0-9+*]+(?:,[0-9+*]*)?(?:\|[0-9+*]*)?\})|[^.?*+^${[]()|\\]+|./g,
 		//Thx to https://github.com/slevithan/regex-colorizer for the regexTokenizer regex
-		regexTokenizer = /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,
-		escaped = false,
+		regexTokenizer = /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g;
+	var escaped = false,
 		currentToken = new MaskToken(),
 		match,
 		m,
@@ -329,7 +329,6 @@ function analyseMask(mask, regexMask, opts) {
 						currentToken.matches = [];
 						closeRegexGroup = true;
 					}
-
 					break;
 			}
 		}
@@ -339,6 +338,13 @@ function analyseMask(mask, regexMask, opts) {
 			continue;
 		}
 		switch (m.charAt(0)) {
+			case "$":
+			case "^":
+				//ignore beginswith and endswith as in masking this makes no point
+				if (!regexMask) {
+					defaultCase();
+				}
+				break;
 			case "(?=": //lookahead
 				break;
 			case "(?!": //negative lookahead

+ 1 - 1
lib/validation-tests.js

@@ -530,6 +530,6 @@ function getTests(pos, ndxIntlzr, tstPs) {
 		return $.extend(true, [], matches);
 	}
 	maskset.tests[pos] = $.extend(true, [], matches); //set a clone to prevent overwriting some props
-	console.log(pos + " - " + JSON.stringify(matches));
+	// console.log(pos + " - " + JSON.stringify(matches));
 	return maskset.tests[pos];
 }

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "inputmask",
-  "version": "5.0.4-beta.58",
+  "version": "5.0.4-beta.59",
   "description": "Inputmask is a javascript library which creates an input mask.  Inputmask can run against vanilla javascript, jQuery and jqlite.",
   "main": "index.js",
   "files": [