## 规则模式说明
1. 基于数据库规则配置
2. 四中分类校验
3. 支持扩展
4. 支持多记录校验
5. 适用小型表单校验,主大表单校验
6. 上手容易,未做扩展包发布 (可发布)
## 规则设计
数据表
```
CREATE TABLE `yw_lrules` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`LR_KEY` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '基于规则获取分组的KEY值',
`LR_GROUP` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '内置分组类型[D,E,F,G]',
`LR_COL` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '字段名称',
`LR_LABEL` varchar(80) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '标签名',
`LR_DESC` varchar(300) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '提示全称(自定义)',
`LR_REQUIRED` tinyint(4) NOT NULL DEFAULT '0' COMMENT '必填[1=是,0=否]',
`LR_RULES` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '规则配置(混合模式,详见文档)',
`LR_STATUS` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态[1=启用,0=禁用]',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
```
表字段说明:
LR_KEY:外部值,主要用于规则筛选;
LR_GROUP:系统内置分组类型
D: 系统内置规则 [自定义扩展规则]
E: 正则,直接输入正则规则
F:依赖模式
G: 全局模式
LR_COL:字段名称,格式如 (单记录:main.name,main.user.idcard,多记录:file.*.size)
LR_LABEL:字段提示名(如果没有 desc 则系统内置提示)
LR_DESC:自定义描述
LR_REQUIRED:字段是否必填
LR_RULES:规则集(稍后介绍)
LR_STATUS:是否启用
模式介绍:
数据格式如下:
```
$list = [
'main' => [
'zgjob02' => [
'NAME' => '呵呵',
'ZGJOB020001' => '采购部门',
'ZGJOB020002' => '362330xxxxxxxxxxx',
'ZGJOB020003' => '0',
],
],
'zgjob03' => [
'ZGJOB02030001' => '12',
'ZGJOB02030002' => '12.36',
'ZGJOB02030003' => '12.003',
'ZGJOB02030004' => '20.3',
'ZGJOB02030005' => '',
],
'zgjob08' => [
['aaa' => '111.2112', 'bbb' => '333.12'],
['aaa' => '222.022', 'bbb' => '444'],
],
];
```
```
D 模式:主要用与系统内置规则和自定义规则
数据库配置如下:
LR_GROUP:D
LR_COL:main.zgjob02.NAME
LR_LABEL:姓名
LR_DESC:’’
LR_REQUIRED:1
LR_RULES:chs|minone:2|maxone:20
D 模式的规则配置说明:chs 表示只能属于中文,minone 表示最小字符,maxone 表示最大字符,每个规则通过 “|” 分割,需要额外比较参数通过 “:” 携带,多个参数通过 “,” 分割,详细规则后续说明
E 模式:主要用于直接的系统未内置的正则表达式
如:LR_RULES:/^-?[0-9]+(.[0-9]{1,2})?$/
直接配置到数据库中即可
F 模式:主要用于依赖必填模式,比如 A 如果必填必须 B 等于多少或其他
如:LR_RULES:({main.zgjob02.ZGJOB020003} <= 23 && !in_array (‘{zgjob03.ZGJOB02030001}’, [11,12,3])) || (‘{zgjob03.ZGJOB02030004}’ != ‘20’)
里面的参数值通过 “{}” 包裹,系统解析规则条件是否满足判断
G 模式:主要用于复杂逻辑判断,系统无法支持,可通过自定义方式扩展自行编写处理
如:LR_RULES:App\Http\Controllers\WF\Stateless\JishulinController|testValidate01
“|” 分割,第一个为类,第二个为方法,方法的参数第一个为校验数据,第二个为外部带入(后续说明)
```
## 如何扩展规则
系统默认扩展类为:App\\Extend\\ExpandRules
如果不用系统自带的,需要在 app 配置文件中,指定 rule=>’App\\Test’自己的扩展类名即可
示例如下:
```
<?php
namespace App;
class Test
{
// 参数说明
// val 被校验值
// label 字段名
// desc 自定义描述
// limitVal 比较参数值
public function checkAaa($val, $label, $desc, $limitVal = null)
{
// 校验通过
return true;
// 不通过
return [
'error' => 1,
'message' => '校验不通过'
];
}
}
```
校验成功需返回 “true”,校验不通过需返回上述格式。其中 G 模式校验返回如果成功返回格式为 \[‘error’ => 0\], 不通过一样,注意两者区别。
## 系统内置规则
```
// 规则如下配置
// 检验是否必填完整[$limitVal=1必填校验,否则不做校验]
required => required:1
// 校验中文汉字
chs => chs
// 【解析中文字符为3个字符长度】判断字符长度最小值不能小于$limitVal(不含等于)
min => min:10
// 【解析中文字符为3个字符长度】判断字符长度最大值不能大于$limitVal(不含等于)
max => max:20
// 【解析中文字符为1个字符长度】判断字符长度最小值不能小于$limitVal(不含等于)
minone => minone:10
// 【解析中文字符为1个字符长度】判断字符长度最大值不能大于$limitVal(不含等于)
maxone => maxone:10
// 身份证规则校验
idcard => idcard
// 纯数字,没有+-符号及小数点等
number => number
// 浮点数,最多含一位小数点
float1dot => float1dot
// 浮点数,最多含两位小数点
float2dot => float2dot
// 浮点数,指定小数点位数
float => float:4
// 身份证号码[正则校验]
idcardreg => idcardreg
// 手机号码格式
mobile => mobile
// 只能是汉字、字母、数字和下划线_及破折号-
chsdash => chsdash
// 只能是汉字、字母和数字
chsalphanum => chsalphanum
// 是汉字、字母
chsalpha => chsalpha
// 字母和数字,下划线及破折号
alphadash => alphadash
// 字母和数字
alphanum => alphanum
// 纯字母,含大小写
alpha => alpha
// 指定等于(限制为)某个值
equal => equal:120
equal => equal:sss
// 判断字符长度在两者之间(中文算3个字符)
length => length:10,30
// 判断字符长度在两者之间(中文算1个字符)
lengthone => lengthone:10,30
// 判断数字在两者之间
between => between:10,90
// 判断数字不在两者之间
notbetween => notbetween:1,10
// 正则校验在其中
regex => regex:/^-?[0-9]+(.[0-9]{1,2})?$/
// 正则校验不在其中
notregex => notregex:/^-?[0-9]+(.[0-9]{1,2})?$/
// 是否是日期格式[yyyy-mm-dd HH:ii:ss,yyyy-mm-dd HH:ii][yyyy-mm-dd,yymmdd,yyyy/mm/dd]
datetime => datetime
// 日期指定格式校验[ymd,y-m-d,y/m/d]
// ymd,ymdhi,ymdhis
// y-m-d,y-m-d-h-i,y-m-d-h-i-s
// y/m/d,y/m/d/h/i,y/m/d/h/i/s
dateformat => dateformat:ymd
// 电话座机格式
phone => phone
// 电话座机区号格式
phonearea => phonearea
// 电话座机格式或手机号码格式
tel => tel
// 邮政编码格式
post => post
```
- 产品介绍
- 功能介绍
- 联系合作
- 修订记录
- 环境安装
- 依赖环境
- 依赖服务
- 前端环境
- 核心功能
- 流程引擎
- 流程编辑步骤
- 流程设计
- 业务表设计
- 表单设计
- 报表设计
- 节点配置
- 全局配置
- 规则引擎
- 模块功能
- 系统管理
- 平台架构
- 平台(单位)管理
- 组织架构
- 用户管理
- 角色管理
- 运维管理
- 菜单管理
- 流程管理
- 代码管理
- 字典管理
- 车型库管理
- 报表管理
- 产品管理
- 经销商管理
- 数据字典
- 业务设置
- 业务报表设置
- 系统配置
- 微信小程序设置
- OCR识别
- 钉钉通知
- 钉钉登录授权
- 云储存设置
- 服务规划
- 其他产品
- 教育点播
- 退役政务
- 三方报表
- 微信社群
- 场景名片
- 合同电子签
- TP5实用封装
- 通用封装
- Export通用封装
- Import通用封装
- 配合Import通用封装的ImportBaseVerify类
- Files通用封装
- Directory通用封装
- Pdf通用封装
- Words通用封装
- Nredis(redis封装)
- ZipArchives压缩zip文件封装
- BarQrcode条形码二维码
- Publics公共方法封装
- Curls(cUrl请求封装)
- extend扩展开发
- 何时编写扩展文件包
- 扩展文件包如何编写
- 题外话
- 常用的compose安装
- 一些建议及细节
- 实用工具
- 源码分析
- 入口文件index.php
- think\Facade类详解
- App对接Api设计
- 设计模式说明(为什么这么做)
- 代码设计逻辑方案
- 数据库备份
- 实用案例
- 如何“偷”JAVA代码
- SAAS接口设计
- 1、创建saas基类文件
- 2、初始化控制器服务
- 3、身份校验
- 4、创建登录控制器
- 5、实现登录服务层
- 6、服务层继承的service类
- 7、该案例的完整模块包
- 校验型规则校验扩展包
- 自定义规则解析(可供参考)
- 通用文件扩展包(File,Zip)
- PHP实现word转PDF功能环境搭建
- 日志通用扩展包
- 定时任务
- PHP视频处理器安装环境搭建
- 日常开发问题记录
- 1、mysql存储中带一些不可见字符
- 2、php开发规范校验及修复