表单验证器

表单验证器使用说明文档

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. 验证规则的配置方式和参数说明

验证规则基本结构

验证规则通常包含三个参数:

  1. rule:规则名称(如 isRequired, isEmail, isNumeric 等)
  2. value:规则参数(通常是布尔值或具体数值)
  3. message:验证失败时的错误提示信息

配置参数详解

参数类型说明
rulestring验证规则的名称,决定验证类型
valuemixed验证规则的参数,根据规则不同而变化
messagestring验证失败时显示的错误提示信息

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()
]

验证器参数详细说明

以下表格列出了各个验证器的具体参数信息,以便更准确地使用它们:

参数名称参数类型参数说明
isRequiredboolean验证字段是否必填
isEmailboolean验证是否为有效的电子邮件格式
isUrlboolean验证是否为有效的URL格式
isNumericboolean验证是否为数值
isAlphaboolean验证是否只包含字母
isAlphanumericboolean验证是否只包含字母或数字
isIntboolean验证是否为整数
isFloatboolean验证是否为浮点数
isJsonboolean验证是否为合法的JSON字符串
isUrlPathboolean验证是否为URL路径
isPhoneNumberboolean验证是否为合法的手机号码
isTelNumberboolean验证是否为合法的电话号码
isZipcodeboolean验证是否为邮编号码
isIdboolean验证是否为身份证号码(支持18位和15位)
matchRegexpstring/RegExp用于匹配的正则表达式
matchRegexp:/foo/string/RegExp用于匹配的正则表达式
matchRegexp${n}:/foo/string/RegExp用于匹配的正则表达式
isVariableNameboolean/object验证是否为合法的变量名
isLength:lengthnumber验证字符串长度是否正好等于该值
minLength:lengthnumber验证字符串最小长度
maxLength:lengthnumber验证字符串最大长度
maximum:numbernumber验证数值的最大值
minimum:numbernumber验证数值的最小值
equals:xxxany用于比较的目标值
equalsField:xxxstring用于比较的字段名
isRequiredboolean验证字段是否必填
isArrayboolean验证数组格式
equalany验证相等性
isDomainboolean验证域名格式
isIpboolean验证IP地址格式
isDateTimeSamedate/string, string目标日期和比较粒度
isDateTimeBeforedate/string, string目标日期和比较粒度
isDateTimeAfterdate/string, string目标日期和比较粒度
isDateTimeSameOrBeforedate/string, string目标日期和比较粒度
isDateTimeSameOrAfterdate/string, string目标日期和比较粒度
isDateTimeBetweendate/string, date/string, date/string, string, string左边界、右边界、比较粒度和区间类型
isTimeSametime/string, string目标时间和比较粒度
isTimeBeforetime/string, string目标时间、比较粒度
isTimeAftertime/string, string目标时间、比较粒度
isTimeSameOrBeforetime/string, string目标时间、比较粒度
isTimeSameOrAftertime/string, string目标时间、比较粒度
isTimeBetweentime/string, time/string, time/string, string, string左边界、右边界、比较粒度和区间类型