createMask
根据模板创建掩码。字符串或数组可以直接传给 mask 和 attach —— createMask 用于自定义令牌、预处理输入以及自定义去掉掩码后的值。
签名
ts
function createMask(options: MaskOptions | string | string[]): Mask
interface MaskOptions {
pattern: string | string[] | ((input: string) => string);
tokens?: Record<string, { pattern: RegExp; transform?: 'upper' | 'lower' | ((char: string) => string) }>;
prepare?: (input: string) => string;
allow?: (raw: string, char: string) => boolean;
validate?: (result: MaskResult) => boolean;
output?: (result: MaskResult) => string;
}| 选项 | 说明 |
|---|---|
pattern | 模板、模板数组(使用第一个合适的)或基于输入的函数 —— 见 模板 |
tokens | 在 9、a、* 之外的自定义令牌 |
prepare | 格式化前预处理输入 —— 例如把电话开头的 8 变为 +7 |
allow | 根据已输入内容(raw)判断能否接受该字符。日期掩码就是这样拒绝 32 日的 |
validate | 填写完整的值是否正确 —— 结果写入 valid 和 isValid。只在掩码填写完整时调用 |
output | 去掉掩码后的值。默认为不含字面量的已输入字符(result.raw) |
MaskResult 为 { value, raw, complete, slots, overflow }:格式化后的值、已输入字符、掩码是否填写完整、已输入字符的位置、是否有多余字符。
示例
ts
// order number: 2 letters + 6 digits, stored without the dash
const orderNumber = createMask({
pattern: 'LL-999999',
tokens: { L: { pattern: /[a-z]/i, transform: 'upper' } },
});
mask('ab123456', orderNumber); // 'AB-123456'
unmask('AB-123456', orderNumber); // 'AB123456'