2
0
mirror of https://github.com/tenrok/maska.git synced 2026-05-15 11:59:38 +03:00

Merge pull request #147 from killroyboy/master

allow custom escape character
This commit is contained in:
Alexander Shabunevich
2023-04-20 23:37:03 +03:00
committed by GitHub
4 changed files with 53 additions and 2 deletions
+14 -1
View File
@@ -96,6 +96,19 @@ export class Mask {
)
}
private isEscape (ch: string) {
if (ch === '!' && !this.opts.tokensReplace) {
return true
} else {
for (let tokensKey in this.opts.tokens) {
if (tokensKey === ch && this.opts.tokens[tokensKey].escape) {
return true
}
}
}
return false;
}
private escapeMask (maskRaw: string): {
mask: string
escaped: number[]
@@ -103,7 +116,7 @@ export class Mask {
const chars: string[] = []
const escaped: number[] = []
maskRaw.split('').forEach((ch, i) => {
if (ch === '!' && maskRaw[i - 1] !== '!') {
if (this.isEscape(ch) && !this.isEscape(maskRaw[i - 1])) {
escaped.push(i - escaped.length)
} else {
chars.push(ch)
+2 -1
View File
@@ -46,7 +46,8 @@ const parseTokens = (value: string): MaskTokens => {
pattern: new RegExp(parts[1]),
optional: parts[2] === 'optional',
multiple: parts[2] === 'multiple',
repeated: parts[2] === 'repeated'
repeated: parts[2] === 'repeated',
escape: parts[2] === 'escape'
}
})
+1
View File
@@ -3,6 +3,7 @@ interface MaskToken {
multiple?: boolean
optional?: boolean
repeated?: boolean
escape?: boolean
transform?: (char: string) => string
}
+36
View File
@@ -1449,6 +1449,42 @@ describe("Optional with multiple '-9' mask", () => {
})
})
describe("Custom escape with '$#!99' mask", () => {
beforeAll(() => {
input = prepareInput({
mask: '$#!99',
tokens: {
'$': { pattern: /\$/, escape: true },
'9': { pattern: /\d/, multiple: true }
},
})
})
afterEach(async () => {
await user.clear(input)
})
test('input { }', async () => {
await user.type(input, '{ }')
expect(input).toHaveValue('#9')
})
test('input 1', async () => {
await user.type(input, '1')
expect(input).toHaveValue('#91')
})
test('input 91', async () => {
await user.type(input, '91')
expect(input).toHaveValue('#91')
})
test('input 1234', async () => {
await user.type(input, '1234')
expect(input).toHaveValue('#91234')
})
})
describe('IP mask', () => {
beforeAll(() => {
input = prepareInput({