From c458988ab7caaf5a1ff8130224e6b05af2f38781 Mon Sep 17 00:00:00 2001 From: austingreco Date: Fri, 29 Mar 2013 23:45:53 -0500 Subject: [PATCH] fix(ngPattern): allow modifiers on inline ng-pattern Add support for regex modifiers on inline `ng-pattern`. `ng-pattern="/regex/i"` now validates correctly. Closes #1437 --- src/ng/directive/input.js | 8 +++++--- test/ng/directive/inputSpec.js | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/ng/directive/input.js b/src/ng/directive/input.js index 71456470cb91..2574360cc4e1 100644 --- a/src/ng/directive/input.js +++ b/src/ng/directive/input.js @@ -439,7 +439,8 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { // pattern validator var pattern = attr.ngPattern, - patternValidator; + patternValidator, + match; var validate = function(regexp, value) { if (isEmpty(value) || regexp.test(value)) { @@ -452,8 +453,9 @@ function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { }; if (pattern) { - if (pattern.match(/^\/(.*)\/$/)) { - pattern = new RegExp(pattern.substr(1, pattern.length - 2)); + match = pattern.match(/^\/(.*)\/([gim]*)$/); + if (match) { + pattern = new RegExp(match[1], match[2]); patternValidator = function(value) { return validate(pattern, value) }; diff --git a/test/ng/directive/inputSpec.js b/test/ng/directive/inputSpec.js index 4dcb79a38d12..b6ce0f7dd7e1 100644 --- a/test/ng/directive/inputSpec.js +++ b/test/ng/directive/inputSpec.js @@ -476,6 +476,18 @@ describe('input', function() { }); + it('should validate in-lined pattern with modifiers', function() { + compileInput(''); + scope.$digest(); + + changeInputValueTo('aB'); + expect(inputElm).toBeValid(); + + changeInputValueTo('xx'); + expect(inputElm).toBeInvalid(); + }); + + it('should validate pattern from scope', function() { compileInput(''); scope.regexp = /^\d\d\d-\d\d-\d\d\d\d$/; @@ -496,9 +508,9 @@ describe('input', function() { changeInputValueTo('x'); expect(inputElm).toBeInvalid(); - scope.regexp = /abc?/; + scope.regexp = /abc?/i; - changeInputValueTo('ab'); + changeInputValueTo('aB'); expect(inputElm).toBeValid(); changeInputValueTo('xx');