## 規則模式說明
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開發規范校驗及修復