mirror of
https://github.com/tenrok/maska.git
synced 2026-06-11 18:02:27 +03:00
Add dynamic mask
This commit is contained in:
+4
-4
@@ -4,11 +4,11 @@ import { isString } from './utils'
|
||||
function getOpts (mask) {
|
||||
const opts = {}
|
||||
|
||||
if (isString(mask)) {
|
||||
opts.mask = mask
|
||||
} else if (mask.mask) {
|
||||
opts.mask = mask.mask
|
||||
if (mask.mask) {
|
||||
opts.mask = Array.isArray(mask.mask) ? JSON.stringify(mask.mask) : mask.mask
|
||||
opts.tokens = mask.tokens ? { ...mask.tokens } : {}
|
||||
} else {
|
||||
opts.mask = Array.isArray(mask) ? JSON.stringify(mask) : mask
|
||||
}
|
||||
|
||||
return opts
|
||||
|
||||
+31
@@ -1,4 +1,35 @@
|
||||
export default function mask (value, mask, tokens, masked = true) {
|
||||
return (processMask(mask).length > 1)
|
||||
? dynamic(mask)(value, mask, tokens, masked)
|
||||
: process(value, mask, tokens, masked)
|
||||
}
|
||||
|
||||
function processMask (mask) {
|
||||
try {
|
||||
return JSON.parse(mask)
|
||||
} catch {
|
||||
return [mask]
|
||||
}
|
||||
}
|
||||
|
||||
function dynamic (mask) {
|
||||
const masks = processMask(mask).sort((a, b) => a.length - b.length)
|
||||
|
||||
return function (value, mask, tokens, masked = true) {
|
||||
let i = 0
|
||||
while (i < masks.length) {
|
||||
const currentMask = masks[i]
|
||||
i++
|
||||
const nextMask = masks[i]
|
||||
if (!(nextMask && process(value, nextMask, tokens, true).length > currentMask.length)) {
|
||||
return process(value, currentMask, tokens, masked)
|
||||
}
|
||||
}
|
||||
return '' // empty masks
|
||||
}
|
||||
}
|
||||
|
||||
function process (value, mask, tokens, masked = true) {
|
||||
let im = 0
|
||||
let iv = 0
|
||||
let ret = ''
|
||||
|
||||
Reference in New Issue
Block a user