掩码返回什么
掩码函数返回什么,以及输入框、v-model 和数据中分别是什么值。所有示例都是 tinyval-mask 的真实输出。
概览
| 函数 | 返回值 | phone() 示例 |
|---|---|---|
mask(value, m) | 用于输入框的字符串 | '+7 (999) 123-45-67' |
unmask(value, m) | 用于数据和数据库的字符串 | '79991234567' |
isComplete(value, m) | 所有必填位置都已填写时为 true | true |
isValid(value, m) | 已填写且正确(日期存在、校验和正确)时为 true | true |
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 和数据中的值
| 位置 | 值 |
|---|---|
<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 中处理。
另请参阅
- mask、unmask、isComplete
- 预设掩码:每种掩码去掉掩码后的示例
- 掩码与校验