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> 代表校验未通过。