表单校验(新版)
我们内置了一套新的表单验证机制,通过内置的全新验证引擎可以自动根据组件 value 类型并执行验证逻辑,适配所有 UI 版本,解决了原有方案需要针对不同数据类型和 UI 框架专门适配的问题,显著降低了开发者的配置负担和复杂度。
验证规则
| 规则 | 验证逻辑 | 示例 |
|---|---|---|
| adapter | 开启新版验证逻辑,固定为 true | adapter: true |
| required | 必填 | required:true → "hello"(通过) |
| len | 值长度必须等于指定数值 | len:5 → "hello"(通过) |
| maxLen | 值长度不超过指定数值 | maxLen:10 → "abc"(通过) |
| minLen | 值长度不小于指定数值 | minLen:3 → "ab"(失败) |
| pattern | 值需匹配正则表达式(支持字符串或RegExp对象) | pattern:^\d+$ → "123"(通过) |
| uppercase | 字符串必须全大写 | uppercase:true → "ABC"(通过) |
| lowercase | 字符串必须全小写 | lowercase:true → "abc"(通过) |
| 需符合邮箱格式 | email:true → "a@b.com"(通过) | |
| url | 需符合URL格式(排除mailto:) | url:true → "https://example.com" |
| ip | 需符合IPv4地址格式 | ip:true → "192.168.1.1"(通过) |
| phone | 需符合手机号格式(支持+86前缀) | phone:true → "13800138000"(通过) |
| min | 数值不小于指定值 | min:10 → 15(通过) |
| max | 数值不超过指定值 | max:100 → 50(通过) |
| positive | 必须为正数(>0) | positive:true → 1(通过) |
| negative | 必须为负数(<0) | negative:true → -1(通过) |
| integer | 必须为整数 | integer:true → 3.0(通过) |
| number | 必须为有效数字(非NaN) | number:true → "123"(通过) |
| equal | 值必须等于指定值(严格匹配===) | equal:"abc" → "abc"(通过) |
| enum | 值必须在指定数组中 | enum:[1,2,3] → 2(通过) |
| hasKeys | 对象必须包含指定键名(仅验证键存在性,不校验值) | hasKeys:["id"] → {id:1}(通过) |
| validator | 自定义验证逻辑,必须调用 callback, this.api 可以拿到表单 api | validator:(value, callback) => void; |
| computed | 按条件或公式计算结果判断,结果为假时不通过。值为空且未设置 required 时不执行 | computed:{group:[{field:'amount',condition:'>',value:10}]} |
| message | 错误信息 | message:"填写错误" message:{default:"填写错误", min:"不能小于5位" } |
注意
自定义验证中可通过 this.rule 和 this.api 获取组件和表单的相关信息,便于在验证时访问其他组件的值。
pattern 类型为 string 时,前后不能包含 / 符号,否则会导致正则表达式无效。
自定义验证中无论成功或失败,都必须执行 callback 回调函数。
常见校验示例
输入的值必须大于10
字符串和数字都用 min 判断数值。下面两个年龄的初始值都是 8,提交时会提示必须大于 10。
长度必须大于3
min、max 按数值比较。输入框的值会先转成数字,数字输入框本身就是数字,分组表单的值是数组。编码 2 用对象分别设置 min、max 的错误信息。
自定义验证
编码长度要在 3 到 5 位之间。成功和失败都要调用 callback。
结合其他字段验证
两个编码必须一致。校验函数里用 this.api.getValue 读取另一个字段。
computed 条件
computed 的结果为假时校验不通过。可以写成函数或条件组。条件组的运算符与组件联动相同。值为空且未设置 required 时不执行。
函数的参数是表单数据、api 和当前规则,返回 false、0 或空字符串时不通过。
条件组用 group 列出比较。每条由 field、condition、value 组成。mode 为 AND 时全部成立才通过,为 OR 时有一条成立就通过。invert: true 会把结果取反。


