From e9e4c6e8dd5f7591564aad70040f6b7670bba65c Mon Sep 17 00:00:00 2001 From: ghetolay Date: Mon, 18 Sep 2017 22:28:36 +0200 Subject: [PATCH] feat(forms): handle string with and without line boundary on pattern validator --- packages/forms/src/validators.ts | 9 ++++++++- packages/forms/test/validators_spec.ts | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/forms/src/validators.ts b/packages/forms/src/validators.ts index 3daab238b4b78..52a1d624c7850 100644 --- a/packages/forms/src/validators.ts +++ b/packages/forms/src/validators.ts @@ -145,7 +145,14 @@ export class Validators { let regex: RegExp; let regexStr: string; if (typeof pattern === 'string') { - regexStr = `^${pattern}$`; + regexStr = ''; + + if (pattern.charAt(0) !== '^') regexStr += '^'; + + regexStr += pattern; + + if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$'; + regex = new RegExp(regexStr); } else { regexStr = pattern.toString(); diff --git a/packages/forms/test/validators_spec.ts b/packages/forms/test/validators_spec.ts index 84fa3935ed4f8..8e962d4c66a02 100644 --- a/packages/forms/test/validators_spec.ts +++ b/packages/forms/test/validators_spec.ts @@ -270,6 +270,12 @@ export function main() { it('should not error on "undefined" pattern', () => expect(Validators.pattern(undefined !)(new FormControl('aaAA'))).toBeNull()); + + it('should work with string containing line boundary', + () => expect(Validators.pattern('^[aA]*$')(new FormControl('aaAA'))).toBeNull()); + + it('should work with string not containing line boundary', + () => expect(Validators.pattern('[aA]*')(new FormControl('aaAA'))).toBeNull()); }); describe('compose', () => {