表单验证器使用说明文档
1. 表单验证器基本概念和作用
AMIS 表单验证器是用于验证用户输入数据的有效性和合规性的功能模块。它能够帮助开发者确保用户提交的数据符合预设的规则和要求,从而提高数据质量和系统的可靠性。
验证器的主要作用包括:
- 数据完整性检查:确保必需字段不为空
- 格式校验:验证数据格式是否正确(如邮箱、手机号等)
- 范围限制:验证数值或字符串长度是否在合理范围内
- 业务规则校验:根据特定业务需求验证数据
2. 如何在表单中添加验证规则
在AMIS中,可以通过以下两种方式添加验证规则:
方式一:使用 addValidate 方法
在积木云框架中,可通过 addValidate 方法添加验证规则:
InputText::make()
->name('email')
->label('邮箱')
->addValidate('isEmail', true, '请输入正确的邮箱格式')
->get()
方式二:直接设置 required 属性
对于简单的必填验证,可以直接设置 required 属性:
InputText::make()
->name('username')
->label('用户名')
->required(true)
->get()
3. 验证规则的配置方式和参数说明
验证规则基本结构
验证规则通常包含三个参数:
- rule:规则名称(如
isRequired,isEmail,isNumeric等) - value:规则参数(通常是布尔值或具体数值)
- message:验证失败时的错误提示信息
配置参数详解
| 参数 | 类型 | 说明 |
|---|---|---|
| rule | string | 验证规则的名称,决定验证类型 |
| value | mixed | 验证规则的参数,根据规则不同而变化 |
| message | string | 验证失败时显示的错误提示信息 |
4. 验证失败时的错误提示机制
当验证失败时,AMIS会根据配置的错误信息进行提示:
- 验证错误信息存储在
validationErrors字段中 - 对应的验证规则存储在
validations字段中 - 错误信息会在表单项下方显示,提醒用户修正输入
- 只有在用户修改表单值或提交表单时才会触发验证
5. 所有支持的内置验证规则完整列表
基础格式验证
| 验证器 | 说明 |
|---|---|
| isEmail | 必须是 Email |
| isUrl | 必须是 Url |
| isNumeric | 必须是 数值 |
| isAlpha | 必须是 字母 |
| isAlphanumeric | 必须是 字母或者数字 |
| isInt | 必须是 整形 |
| isFloat | 必须是 浮点形 |
| isJson | 是否是合法的 Json 字符串 |
| isUrlPath | 是 url 路径 |
| isPhoneNumber | 是否为合法的手机号码 |
| isTelNumber | 是否为合法的电话号码 |
| isZipcode | 是否为邮编号码 |
| isId | 是否为身份证号码,支持 18 位和 15 位验证,单个验证请使用 isId18 / isId15 |
| matchRegexp | 匹配正则表达式 |
| matchRegexp:/foo/ | 必须命中某个正则 |
| matchRegexp${n}:/foo/ | 必须命中某个正则。设置正则表达式时属性名需以 matchRegexp 开头,n支持1-9,且 validations 及 validationsErrors 中属性名需匹配 |
| isVariableName | 是否为合法的变量名,默认规则为 /^[a-zA-Z_]+[a-zA-Z0-9]$/ 可以自己指定如 {isVariableName: /^a.$/} |
长度验证
| 验证器 | 说明 |
|---|---|
| isLength:length | 是否长度正好等于设定值 |
| minLength:length | 最小长度 |
| maxLength:length | 最大长度 |
数值范围验证
| 验证器 | 说明 |
|---|---|
| maximum:number | 最大值 |
| minimum:number | 最小值 |
相等性验证
| 验证器 | 说明 |
|---|---|
| equals:xxx | 当前值必须完全等于 xxx |
| equalsField:xxx | 当前值必须与 xxx 变量值一致 |
日期时间验证
| 验证器 | 说明 |
|---|---|
| isDateTimeSame | 日期和目标日期相同,支持指定粒度,默认到毫秒 millisecond |
| isDateTimeBefore | 日期早于目标日期,支持指定粒度,默认到毫秒 millisecond |
| isDateTimeAfter | 日期晚于目标日期,支持指定粒度,默认到毫秒 millisecond |
| isDateTimeSameOrBefore | 日期早于目标日期或和目标日期相同,支持指定粒度,默认到毫秒 millisecond |
| isDateTimeSameOrAfter | 日期晚于目标日期或和目标日期相同,支持指定粒度,默认到毫秒 millisecond |
| isDateTimeBetween | 日期处于目标日期范围,支持指定粒度和区间的开闭形式,默认到毫秒 millisecond,左右开区间'()' |
| isTimeSame | 时间和目标时间相同,支持指定粒度,默认到毫秒 millisecond |
| isTimeBefore | 时间早于目标时间,支持指定粒度,默认到毫秒 millisecond |
| isTimeAfter | 时间晚于目标时间,支持指定粒度,默认到毫秒 millisecond |
| isTimeSameOrBefore | 时间早于目标时间或和目标时间相同,支持指定粒度,默认到毫秒 millisecond |
| isTimeSameOrAfter | 时间晚于目标时间或和目标时间相同,支持指定粒度,默认到毫秒 millisecond |
| isTimeBetween | 时间处于目标时间范围,支持指定粒度和区间的开闭形式,默认到毫秒 millisecond,左右开区间'()' |
其他常用验证规则
| 验证器 | 说明 |
|---|---|
| isRequired | 验证字段是否必填 |
| isArray | 验证数组格式 |
| equal | 验证相等性 |
| isDomain | 验证域名格式 |
| isIp | 验证IP地址格式 |
使用示例
以下是一个综合使用多种验证规则的示例:
use plugin\xbCode\builder\Components\Form\InputText;
use plugin\xbCode\builder\Components\Form\InputPassword;
[
InputText::make()
->name('username')
->label('用户名')
->addValidate('isRequired', true, '用户名不能为空')
->addValidate('minLength', 3, '用户名长度不能少于3个字符')
->addValidate('maxLength', 20, '用户名长度不能超过20个字符')
->get(),
InputText::make()
->name('email')
->label('邮箱')
->addValidate('isRequired', true, '邮箱不能为空')
->addValidate('isEmail', true, '请输入正确的邮箱格式')
->get(),
InputText::make()
->name('phone')
->label('手机号')
->addValidate('isRequired', true, '手机号不能为空')
->addValidate('pattern', '^1[3-9]\\d{9}$', '请输入正确的手机号码')
->get(),
InputPassword::make()
->name('password')
->label('密码')
->addValidate('isRequired', true, '密码不能为空')
->addValidate('minLength', 6, '密码长度不能少于6位')
->get(),
InputPassword::make()
->name('confirm_password')
->label('确认密码')
->addValidate('isRequired', true, '请确认密码')
->addValidate('equal', 'password', '两次密码输入不一致')
->get()
]
验证器参数详细说明
以下表格列出了各个验证器的具体参数信息,以便更准确地使用它们:
| 参数名称 | 参数类型 | 参数说明 |
|---|---|---|
| isRequired | boolean | 验证字段是否必填 |
| isEmail | boolean | 验证是否为有效的电子邮件格式 |
| isUrl | boolean | 验证是否为有效的URL格式 |
| isNumeric | boolean | 验证是否为数值 |
| isAlpha | boolean | 验证是否只包含字母 |
| isAlphanumeric | boolean | 验证是否只包含字母或数字 |
| isInt | boolean | 验证是否为整数 |
| isFloat | boolean | 验证是否为浮点数 |
| isJson | boolean | 验证是否为合法的JSON字符串 |
| isUrlPath | boolean | 验证是否为URL路径 |
| isPhoneNumber | boolean | 验证是否为合法的手机号码 |
| isTelNumber | boolean | 验证是否为合法的电话号码 |
| isZipcode | boolean | 验证是否为邮编号码 |
| isId | boolean | 验证是否为身份证号码(支持18位和15位) |
| matchRegexp | string/RegExp | 用于匹配的正则表达式 |
| matchRegexp:/foo/ | string/RegExp | 用于匹配的正则表达式 |
| matchRegexp${n}:/foo/ | string/RegExp | 用于匹配的正则表达式 |
| isVariableName | boolean/object | 验证是否为合法的变量名 |
| isLength:length | number | 验证字符串长度是否正好等于该值 |
| minLength:length | number | 验证字符串最小长度 |
| maxLength:length | number | 验证字符串最大长度 |
| maximum:number | number | 验证数值的最大值 |
| minimum:number | number | 验证数值的最小值 |
| equals:xxx | any | 用于比较的目标值 |
| equalsField:xxx | string | 用于比较的字段名 |
| isRequired | boolean | 验证字段是否必填 |
| isArray | boolean | 验证数组格式 |
| equal | any | 验证相等性 |
| isDomain | boolean | 验证域名格式 |
| isIp | boolean | 验证IP地址格式 |
| isDateTimeSame | date/string, string | 目标日期和比较粒度 |
| isDateTimeBefore | date/string, string | 目标日期和比较粒度 |
| isDateTimeAfter | date/string, string | 目标日期和比较粒度 |
| isDateTimeSameOrBefore | date/string, string | 目标日期和比较粒度 |
| isDateTimeSameOrAfter | date/string, string | 目标日期和比较粒度 |
| isDateTimeBetween | date/string, date/string, date/string, string, string | 左边界、右边界、比较粒度和区间类型 |
| isTimeSame | time/string, string | 目标时间和比较粒度 |
| isTimeBefore | time/string, string | 目标时间、比较粒度 |
| isTimeAfter | time/string, string | 目标时间、比较粒度 |
| isTimeSameOrBefore | time/string, string | 目标时间、比较粒度 |
| isTimeSameOrAfter | time/string, string | 目标时间、比较粒度 |
| isTimeBetween | time/string, time/string, time/string, string, string | 左边界、右边界、比较粒度和区间类型 |