Skip to content

掩码返回什么 ​

掩码函数返回什么,以及输入框、v-model 和数据中分别是什么值。所有示例都是 tinyval-mask 的真实输出。

概览 ​

函数返回值phone() 示例
mask(value, m)用于输入框的字符串'+7 (999) 123-45-67'
unmask(value, m)用于数据和数据库的字符串'79991234567'
isComplete(value, m)所有必填位置都已填写时为 truetrue
isValid(value, m)已填写且正确(日期存在、校验和正确)时为 truetrue
m.process(value)一次返回全部信息 —— MaskResult 对象,见下文
attach → onChange每次输入框变化时得到 { value, raw, complete }
v-mask + v-model模型中是带掩码的字符串'+7 (999) 123-45-67'
v-mask.raw + v-model模型中是去掉掩码的值,与 unmask 相同'79991234567'

所有函数都返回字符串:即使是数字掩码也返回 '1234.5' 而不是 1234.5 —— 以免丢失前导零和精度。如需数字,请使用 Number(...) 或 coerce.number。

unmask 返回什么 ​

去掉掩码后的值取决于掩码 —— 也就是便于存储的形式:

掩码输入框中unmask
自定义模板 '99-99'12-34'1234' —— 不含字面量的已输入字符
phone()+7 (999) 123-45-67'79991234567' —— 包含国家代码的全部数字
card()4276 1234 5678 9012'4276123456789012'
numberMask()、money()1 234,5 ₽'1234.5' —— JavaScript 格式:句点、无空格
numberMask({ negative: true })-42'-42'
carPlate()А 123 ВС 77'А123ВС77' —— 西里尔字母,即使输入的是拉丁字母
kpp()、mac()7743AB001'7743AB001' —— 大写

如果掩码没有填写完整,unmask 返回已输入的部分:unmask('8999123', phone()) → '7999123'。可以用 isComplete 检查是否填写完整。

MaskResult —— 一次获取全部信息 ​

mask.process(value) 返回完整结果。在编写自定义输入框绑定或组件时需要用到:

ts
phone().process('8999123');
json
{
  "value": "+7 (999) 123",
  "raw": "999123",
  "complete": false,
  "valid": false,
  "slots": [4, 5, 6, 9, 10, 11],
  "overflow": false
}
字段说明
value格式化后的值 —— 与 mask 的返回值相同
raw模板位置上已输入的字符,不含字面量。对于电话,这里不包含国家代码:+7 是模板的一部分。因此数据请使用 unmask 而不是 raw
complete所有必填位置都已填写 —— 与 isComplete 相同
valid已填写且正确 —— 与 isValid 相同
slots已输入字符在 value 中的索引 —— 用于定位光标
overflow输入中有放不下的字符:对 '99-99' 调用 process('1234567') → true

为什么 raw 和 unmask 不同:raw 是掩码的内部值(用于计算光标),而 unmask 是用于数据的值,由每个掩码决定其形式。对于自定义模板,两者相同。

输入框、v-model 和数据中的值 ​

使用 v-mask 或 attach 时:

位置值
<input> 中+7 (999) 123-45-67
v-model 中'+7 (999) 123-45-67' —— 与输入框中相同;使用 v-mask.raw 时为 '79991234567'
attach 的 onChange 中{ value: '+7 (999) 123-45-67', raw: '79991234567', complete: true, valid: true } —— 这里的 raw 已经是 unmask 的结果
发送给服务端的数据中'79991234567' —— 在 Schema 中经过 unmask 之后,见 掩码与校验

模型有意保存带掩码的值:这样输入框和模型始终一致,而“纯”值只在一个地方生成 —— 提交前在 Schema 中处理。

另请参阅 ​