From ce1243abcd011c8e665c6663d4af88dd9f3a4264 Mon Sep 17 00:00:00 2001 From: Alexander Shabunevich Date: Sat, 6 Apr 2024 10:13:31 +0300 Subject: [PATCH] fix!: change eager mask behavior Now eager mask take into account a hardcoded symbols --- src/mask.ts | 5 ++++ test/mask.test.ts | 71 ++++++++++++++++++++++++++++------------------- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/src/mask.ts b/src/mask.ts index 627dd16..e14112b 100644 --- a/src/mask.ts +++ b/src/mask.ts @@ -217,6 +217,11 @@ export class Mask { ) { if (masked) { result[method](mask.charAt(m)) + if (value.charAt(v) === mask.charAt(m)) { + m += offset + v += offset + continue + } } else if (mask.charAt(m) === value.charAt(v)) { v += offset } diff --git a/test/mask.test.ts b/test/mask.test.ts index 6950b83..86a3fb9 100644 --- a/test/mask.test.ts +++ b/test/mask.test.ts @@ -175,7 +175,9 @@ test('0#.# mask', () => { const mask = new Mask({ mask: '0#.#' }) expect(mask.masked('1')).toBe('01') + expect(mask.masked('0')).toBe('0') expect(mask.masked('01')).toBe('01') + expect(mask.masked('01.')).toBe('01.') expect(mask.masked('12')).toBe('01.2') expect(mask.masked('1.2')).toBe('01.2') expect(mask.masked('01.2')).toBe('01.2') @@ -189,10 +191,12 @@ test('0#.# eager mask', () => { const mask = new Mask({ mask: '0#.#', eager: true }) expect(mask.masked('1')).toBe('01.') - expect(mask.masked('01')).toBe('00.1') + expect(mask.masked('0')).toBe('0') + expect(mask.masked('01')).toBe('01.') + expect(mask.masked('01.')).toBe('01.') expect(mask.masked('12')).toBe('01.2') expect(mask.masked('1.2')).toBe('01.2') - expect(mask.masked('01.2')).toBe('00.1') + expect(mask.masked('01.2')).toBe('01.2') expect(mask.masked('123')).toBe('01.2') expect(mask.masked('a123')).toBe('01.2') @@ -264,6 +268,7 @@ test('0#!-# mask', () => { expect(mask.masked('a')).toBe('0') expect(mask.masked('0')).toBe('0') + expect(mask.masked('01')).toBe('01') expect(mask.masked('1')).toBe('01') expect(mask.masked('12')).toBe('01-2') expect(mask.masked('01-2')).toBe('01-2') @@ -277,10 +282,11 @@ test('!0#!-# eager mask', () => { const mask = new Mask({ mask: '!0#!-#', eager: true }) expect(mask.masked('a')).toBe('0') - expect(mask.masked('0')).toBe('00-') + expect(mask.masked('0')).toBe('0') + expect(mask.masked('01')).toBe('01-') expect(mask.masked('1')).toBe('01-') expect(mask.masked('12')).toBe('01-2') - expect(mask.masked('01-2')).toBe('00-1') + expect(mask.masked('01-2')).toBe('01-2') expect(mask.masked('123')).toBe('01-2') expect(mask.masked('a123')).toBe('01-2') @@ -309,14 +315,14 @@ test('#2 ## eager mask', () => { const mask = new Mask({ mask: '#2 ##', eager: true }) expect(mask.masked('1')).toBe('12 ') - expect(mask.masked('12')).toBe('12 2') - expect(mask.masked('12 ')).toBe('12 2') + expect(mask.masked('12')).toBe('12 ') + expect(mask.masked('12 ')).toBe('12 ') expect(mask.masked('13')).toBe('12 3') - expect(mask.masked('123')).toBe('12 23') + expect(mask.masked('123')).toBe('12 3') expect(mask.masked('134')).toBe('12 34') - expect(mask.masked('1234')).toBe('12 23') + expect(mask.masked('1234')).toBe('12 34') expect(mask.masked('1345')).toBe('12 34') - expect(mask.masked('12345')).toBe('12 23') + expect(mask.masked('12345')).toBe('12 34') expect(mask.masked('a1')).toBe('12 ') expect(mask.masked('a13')).toBe('12 3') @@ -348,10 +354,10 @@ test('(#) 3## eager mask', () => { expect(mask.masked('12')).toBe('(1) 32') expect(mask.masked('123')).toBe('(1) 323') expect(mask.masked('1234')).toBe('(1) 323') - expect(mask.masked('13')).toBe('(1) 33') - expect(mask.masked('134')).toBe('(1) 334') + expect(mask.masked('13')).toBe('(1) 3') + expect(mask.masked('134')).toBe('(1) 34') expect(mask.masked('(1) 23')).toBe('(1) 323') - expect(mask.masked('(1) 34')).toBe('(1) 334') + expect(mask.masked('(1) 34')).toBe('(1) 34') expect(mask.unmasked('1')).toBe('1') expect(mask.unmasked('1234')).toBe('123') @@ -387,14 +393,15 @@ test('(1) 2## eager mask', () => { expect(mask.masked(' ')).toBe('(1) 2') expect(mask.masked('.')).toBe('(1) 2') - expect(mask.masked('1')).toBe('(1) 21') - expect(mask.masked('12')).toBe('(1) 212') - expect(mask.masked('123')).toBe('(1) 212') - expect(mask.masked('13')).toBe('(1) 213') - expect(mask.masked('(1) 23')).toBe('(1) 212') - expect(mask.masked('(1) 34')).toBe('(1) 213') - expect(mask.masked('2')).toBe('(1) 22') - expect(mask.masked('23')).toBe('(1) 223') + expect(mask.masked('1')).toBe('(1) 2') + expect(mask.masked('1 ')).toBe('(1) 2') + expect(mask.masked('12')).toBe('(1) 2') + expect(mask.masked('123')).toBe('(1) 23') + expect(mask.masked('13')).toBe('(1) 23') + expect(mask.masked('(1) 23')).toBe('(1) 23') + expect(mask.masked('(1) 34')).toBe('(1) 234') + expect(mask.masked('2')).toBe('(1) 2') + expect(mask.masked('23')).toBe('(1) 23') expect(mask.masked('3')).toBe('(1) 23') expect(mask.unmasked('1')).toBe('') @@ -427,13 +434,14 @@ test('12## eager mask', () => { expect(mask.masked(' ')).toBe('12') expect(mask.masked('.')).toBe('12') - expect(mask.masked('1')).toBe('121') - expect(mask.masked('2')).toBe('122') + expect(mask.masked('1')).toBe('12') + expect(mask.masked('1 ')).toBe('12') + expect(mask.masked('2')).toBe('12') expect(mask.masked('3')).toBe('123') - expect(mask.masked('12')).toBe('1212') - expect(mask.masked('123')).toBe('1212') - expect(mask.masked('13')).toBe('1213') - expect(mask.masked('134')).toBe('1213') + expect(mask.masked('12')).toBe('12') + expect(mask.masked('123')).toBe('123') + expect(mask.masked('13')).toBe('123') + expect(mask.masked('134')).toBe('1234') expect(mask.unmasked('1')).toBe('') expect(mask.unmasked('12')).toBe('') @@ -482,12 +490,16 @@ test('+1 (###) ###-##-## mask', () => { test('+1 (###) ###-##-## eager mask', () => { const mask = new Mask({ mask: '+1 (###) ###-##-##', eager: true }) + expect(mask.masked('.')).toBe('+1 (') + expect(mask.masked(' ')).toBe('+1 (') + expect(mask.masked('+')).toBe('+1 (') expect(mask.masked('99')).toBe('+1 (99') expect(mask.masked('999')).toBe('+1 (999) ') expect(mask.masked('99912')).toBe('+1 (999) 12') expect(mask.masked('999123')).toBe('+1 (999) 123-') - expect(mask.masked('19991234567')).toBe('+1 (199) 912-34-56') - expect(mask.masked('+19991234567')).toBe('+1 (199) 912-34-56') + expect(mask.masked('19')).toBe('+1 (9') + expect(mask.masked('19991234567')).toBe('+1 (999) 123-45-67') + expect(mask.masked('+19991234567')).toBe('+1 (999) 123-45-67') expect(mask.masked('9991234567')).toBe('+1 (999) 123-45-67') expect(mask.masked('a9991234567')).toBe('+1 (999) 123-45-67') @@ -497,8 +509,9 @@ test('+1 (###) ###-##-## eager mask', () => { test('1 (###) ###-##-## eager mask', () => { const mask = new Mask({ mask: '1 (###) ###-##-##', eager: true }) - expect(mask.masked('19991234567')).toBe('1 (199) 912-34-56') + expect(mask.masked('+')).toBe('1 (') expect(mask.masked('+19991234567')).toBe('1 (199) 912-34-56') + expect(mask.masked('19991234567')).toBe('1 (999) 123-45-67') expect(mask.masked('9991234567')).toBe('1 (999) 123-45-67') expect(mask.masked('a9991234567')).toBe('1 (999) 123-45-67')