Filter
<br/>
>i 本文档的最新修订日期是:
> **2023-10-23**
# Filter
## 模块简述
对数据进行校验。
## 模块配置
配置文件位于 <font color="#c7254e">`/config/core/Filter.php`</font> 。
* **<font color="#ff6600">`rule`</font>** <font color="#0099ff">`(Array)`</font> <font color="#bbbbbb">`~`</font> :
用以指定验证规则。
值为一个一维数组,数组中元素的 <font color="#c7254e">`键`</font> 为规则的名称(不可包含分隔符 <font color="#c7254e">`|`</font>),元素的<font color="#c7254e">`值`</font> 为正则表达式字符串。
本模块已内置了如下规则名称,如果重复定义将不会生效:
* <font color="#c7254e">`email`</font> 用以验证数据是否为合法的电邮地址。
* <font color="#c7254e">`ip`</font> 用以验证数据是否为合法的IPv4或IPv6地址。
* <font color="#c7254e">`url`</font> 用以验证数据是否为合法的URL。
* <font color="#c7254e">`json`</font> 用以验证数据是否为合法的JSON字符串。
## :: byMode()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Filter</font> :: <font color="#ff6600">byMode</font> ( <kbd>传参数组</kbd> )</font>**
### 说明
对来自GET/POST/HEADER的数据的进行校验。
此方法 <font color="#c7254e">`支持`</font> 中文参数名。
### 参数
* **<font color="#ff6600">`field(字段)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#BBBBBB">`必须`</font>:
指定字段和校验规则。
此参数为一个一维数组,数组的键为 <font color="#c7254e">`字段名`</font> ,值为 <font color="#c7254e">`非空检查[,最小长度] [,最大长度] [,校验规则]`</font> 的字符串。
其中,<font color="#c7254e">`字段名`</font> 为需要检查的字段名称,<font color="#c7254e">`非空检查`</font> 为检查字段对应的值是否为空(值为 <font color="#c7254e">`TRUE`</font> 或 <font color="#c7254e">`FALSE`</font> ),<font color="#c7254e">`最小长度`</font> 为字段允许的值的最小长度,<font color="#c7254e">`最大长度`</font> 为字段允许的值的最大长度( <font color="#c7254e">`0`</font> 为不限制),<font color="#c7254e">`校验规则`</font> 为模块配置项 <font color="#c7254e">`rule`</font> 中所定义的校验规则,或一个可选值的列表。
如果希望待校验的数据必须为某几个值中的一个,则需要将多个值通过分隔符 <font color="#c7254e">`|`</font> 分开并作为 <font color="#c7254e">`校验规则`</font> 传入,例如:
```PHP
$Config = [
'字段' => [
'delete' => 'TRUE,0,0,true|false',
'mode' => 'TRUE,0,0,default|default' //指定值必须为default
],
'模式' => 'POST'
];
\core\Filter::byMode($Config);
```
模块配置项 <font color="#c7254e">`rule`</font> 中已经预先提供了常用的中国大陆电话号码、身份证号码等格式的校验规则,详情见本模块配置文件中此配置项内的注释说明。
* **<font color="#ff6600">`optional(可选)`</font>** <font color="#0099ff">`(Array)`</font> <font color="#bbbbbb">`[]`</font>:
用以指定可选(非必须)的字段。
此参数为一个一维数组,数组的键无需定义,值为 <font color="#c7254e">`字段名`</font> 的字符串。
若某个字段在本参数数组元素内,则仅当该字段存在时才进行校验。
* **<font color="#ff6600">`mode(模式)`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`必须`</font>:
用以指定数据的来源。
此参数的必须是 <font color="#c7254e">`GET/POST/HEADER`</font> 中的一个。
### 返回
<font color="#0099ff">`(Bool)`</font> 类型。
<font color="#c7254e">`TRUE`</font> 代表校验通过、<font color="#c7254e">`FALSE`</font> 代表校验未通过。
### Hook
* **<font color="#ff6600">`apiphp_filter_mode-verify-failed`</font>** <font color="#0099ff">`/lib/core/Filter.php`</font> <font color="#bbbbbb">`无需返回`</font> :
当校验未通过时,在返回 <font color="#c7254e">`false`</font> 之前,于 <font color="#c7254e">`Filter::byMode()`</font> 中被调用。
传参数组中 <font color="#c7254e">`field`</font> 元素的值即为未通过校验的字段值。
传参数组中 <font color="#c7254e">`result`</font> 元素为一个一维数组,代表字段的校验结果明细,子元素的键为 <font color="#c7254e">`字段名`</font>,子元素的值为 <font color="#c7254e">`true`</font> 时即为通过校验,值为 <font color="#c7254e">`false`</font> 时则为未通过校验。各子元素的含义如下:
* <font color="#c7254e">`0`</font> :非空校验。
* <font color="#c7254e">`1`</font> :长度校验。
* <font color="#c7254e">`2`</font> :规则校验。
## :: lastCheck()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Filter</font> :: <font color="#ff6600">lastCheck</font> ( <kbd>传参数组</kbd> )</font>**
### 说明
返回最后一次使用 <font color="#c7254e">`byMode()`</font> 方法校验数据的校验结果。
### 参数
无。
### 返回
<font color="#0099ff">`(Array)`</font> 类型。
数组中 <font color="#c7254e">`result`</font> 元素为一个一维数组,代表字段的校验结果明细,子元素的键为 <font color="#c7254e">`字段名`</font>,当子元素的值为 <font color="#c7254e">`true`</font> 时即为通过校验,值为 <font color="#c7254e">`false`</font> 时则为未通过校验。各子元素的含义如下:
* <font color="#c7254e">`0`</font> :非空校验。
* <font color="#c7254e">`1`</font> :长度校验。
* <font color="#c7254e">`2`</font> :规则校验。
数组中 <font color="#c7254e">`optional`</font> 元素为一个一维数组,代表可选的字段是否存在,子元素的键为 <font color="#c7254e">`字段名`</font>,当子元素的值为 <font color="#c7254e">`true`</font> 时存在该字段,值为 <font color="#c7254e">`false`</font> 时则为不存在该字段。
>i 由于 <font color="#c7254e">`byMode()`</font> 遇到检验不通过的数据时会立即终止校验流程并返回 <font color="#c7254e">`byMode()`</font>,因此本方法返回的数组中不一定包含完整的参数列表。
## :: byData()方法
### 语法
**<font color="#0099ff"><font color="#ff6600">Filter</font> :: <font color="#ff6600">byData</font> ( <kbd>传参数组</kbd> )</font>**
### 说明
对传入数据的进行校验。
此方法 <font color="#c7254e">`支持`</font> 中文参数名。
### 参数
* **<font color="#ff6600">`data(数据)`</font>** <font color="#0099ff">`(String)`</font> <font color="#bbbbbb">`必须`</font>:
用以指定需要校验的数据。
* **<font color="#ff6600">`check(校验)`</font>** <font color="#0099ff">`(String)`</font> <font color="#BBBBBB">`必须`</font>:
指定校验规则。
此参数的值为 <font color="#c7254e">`非空检查[,最小长度] [,最大长度] [,校验规则]`</font> 的字符串。
其中,<font color="#c7254e">`非空检查`</font> 为检查字段对应的值是否为空(值为 <font color="#c7254e">`TRUE`</font> 或 <font color="#c7254e">`FALSE`</font> ),<font color="#c7254e">`最小长度`</font> 为字段允许的值的最小长度,<font color="#c7254e">`最大长度`</font> 为字段允许的值的最大长度,<font color="#c7254e">`校验规则`</font> 为模块配置项 <font color="#c7254e">`Rule`</font> 中所定义的校验规则。
模块配置项 <font color="#c7254e">`Rule`</font> 中已经预先提供了常用的中国大陆电话号码、身份证号码等格式的校验规则,详情见本模块配置文件中此配置项内的注释说明。
### 返回
<font color="#0099ff">`(Bool)`</font> 类型。
<font color="#c7254e">`TRUE`</font> 代表校验通过、<font color="#c7254e">`FALSE`</font> 代表校验未通过。