验证
FormKit 通过允许你直接在输入项上声明验证规则,使前端验证变得简单。你可以使用内置的 20 多种生产级规则,也可以自定义规则。
声明规则
你可以通过 validation 属性为输入声明验证规则。支持两种语法:
字符串语法
用 | 分隔多个规则,部分规则可带参数(用 : 连接,多个参数用 , 分隔):
vue
<FormKit
type="el-input"
name="username"
label="用户名"
validation="required|length:5"
/>数组语法
也可以用数组,每个元素是一个数组,第一个元素为规则名,后续为参数:
js
validation=[
['required'],
['length', 5],
['matches', /^[a-zA-Z0-9]+$/]
]显示错误
验证规则始终实时计算,但错误的"可见性"由 validation-visibility 属性控制:
| 可见性 | 描述 |
|---|---|
| blur | (默认) 失去焦点后显示错误 |
| live | 始终显示错误 |
| dirty | 用户修改输入值后显示错误 |
| submit | 仅在尝试提交表单后显示错误 |
你可以在 form、group、list 级别通过 config 属性统一设置,也可单独覆盖。
自定义规则
你可以自定义验证规则:
js
const monday = function (node) {
return node.value === 'monday' || node.value === 'mon'
}
monday.blocking = false
monday.skipEmpty = false
monday.debounce = 20
monday.force = true
// 注册
createApp(App).use(plugin, defaultConfig({
rules: { monday },
}))使用:
vue
<FormKit validation="required|monday" />自定义消息
- 使用
validation-label属性自定义字段名 - 使用
validation-messages属性自定义规则消息 - 全局自定义消息可在插件注册时配置
vue
<FormKit
type="el-input"
name="username"
label="用户名"
validation="required"
validation-label="账号"
:validation-messages="{ required: '请填写账号' }"
/>全局自定义消息:
js
createApp(App).use(plugin, defaultConfig({
messages: {
zh: {
validation: {
required({ name }) {
return `请填写${name}字段。`
}
}
}
}
}))如需更多详细用法和规则说明,请参考 FormKit 官方验证文档。
常用内置规则一览
| 规则名 | 说明 | 示例 |
|---|---|---|
| required | 必填 | required |
| min | 最小值/最小长度 | min:3 |
| max | 最大值/最大长度 | max:10 |
| between | 数值/长度在区间内 | between:1,10 |
| length | 指定长度 | length:5 |
| 邮箱格式 | ||
| number | 必须为数字 | number |
| alpha | 仅字母 | alpha |
| alphanumeric | 仅字母和数字 | alphanumeric |
| alpha-spaces | 仅字母和空格 | alpha-spaces |
| url | URL 格式 | url |
| matches | 正则匹配 | matches:/^abc/ |
| starts_with | 以指定内容开头 | starts_with:abc |
| ends_with | 以指定内容结尾 | ends_with:xyz |
| contains | 包含指定内容 | contains:foo |
| not | 不等于指定值 | not:bar |
| confirm | 两个字段值一致 | confirm:password |
| date_after | 晚于指定日期 | date_after:2023-01-01 |
| date_before | 早于指定日期 | date_before:2023-01-01 |
| date_between | 日期在区间内 | date_between:2023-01-01,2023-12-31 |
| date_format | 日期格式 | date_format:YYYY-MM-DD |
| symbol | 仅符号字符 | symbol |
| uppercase | 仅大写字母 | uppercase |
| lowercase | 仅小写字母 | lowercase |
| contains_alpha | 包含字母 | contains_alpha |
| contains_numeric | 包含数字 | contains_numeric |
| contains_symbol | 包含符号 | contains_symbol |
| contains_uppercase | 包含大写字母 | contains_uppercase |
| contains_lowercase | 包含小写字母 | contains_lowercase |
| require_one | 至少一个字段有值 | require_one:field1,field2 |
规则用法示例
required
字段为必填项。
vue
<FormKit type="el-input" name="username" validation="required" />min / max
限制最小/最大长度或数值。
vue
<FormKit type="el-input" name="age" validation="min:18|max:99" />between
数值或长度在区间内。
vue
<FormKit type="el-input" name="score" validation="between:60,100" />length
必须为指定长度。
vue
<FormKit type="el-input" name="code" validation="length:6" />email
必须为邮箱格式。
vue
<FormKit type="el-input" name="email" validation="email" />number
必须为数字。
vue
<FormKit type="el-input" name="amount" validation="number" />alpha / alphanumeric / alpha-spaces
仅字母、字母数字、字母和空格。
vue
<FormKit type="el-input" name="nickname" validation="alpha" />
<FormKit type="el-input" name="usercode" validation="alphanumeric" />
<FormKit type="el-input" name="fullname" validation="alpha-spaces" />url
必须为 URL 格式。
vue
<FormKit type="el-input" name="website" validation="url" />matches
正则表达式匹配。
vue
<FormKit type="el-input" name="custom" validation="matches:/^abc/" />confirm
两个字段值一致。
vue
<FormKit type="password" name="password" validation="required" />
<FormKit type="password" name="confirm" validation="confirm:password" />date_after / date_before / date_between / date_format
日期相关规则。
vue
<FormKit type="el-input" name="start" validation="date_after:2023-01-01" />
<FormKit type="el-input" name="end" validation="date_before:2024-01-01" />
<FormKit type="el-input" name="range" validation="date_between:2023-01-01,2023-12-31" />
<FormKit type="el-input" name="birthday" validation="date_format:YYYY-MM-DD" />contains_*
包含字母、数字、符号、大写、小写等。
vue
<FormKit type="el-input" name="pwd" validation="contains_alpha|contains_numeric|contains_symbol" />not
不等于指定值。
vue
<FormKit type="el-input" name="notfoo" validation="not:foo" />require_one
至少一个字段有值。
vue
<FormKit type="el-input" name="phone" validation="require_one:email,phone" />
<FormKit type="el-input" name="email" validation="require_one:email,phone" />如需所有规则的详细参数和行为说明,请参考 FormKit 官方验证文档。