FuelPHP 标准验证规则概述

目录
大家好,
我是开发团队的 Mandai,负责一些比较特殊的功能。
这次我想和大家分享一些关于 FuelPHP
标准验证规则的信息,包括一些我已知的规则以及一些文档中没有提到的意想不到的用法。请注意,本文内容已在 FuelPHP 1.7.2 版本上测试通过。
必需的
| 规则名称 | 争论 |
|---|---|
| 必需的 | 没有任何 |
`required` 验证规则检查必填字段,如果值为 `false`、`null`、空字符串或不包含任何元素的空数组以外的任何值,则该验证通过。
请注意,除 `required` 之外的其他验证规则在值为空字符串时也可能通过。
required_with
| 规则名称 | 争论 |
|---|---|
| required_with | 字段名 |
只有当名为 `$fieldname` 的字段中的数据符合 `required` 规则时,才会应用 `required` 规则。
例如,如果选中复选框,则验证文本框的内容是否为必填项。
匹配值
| 规则名称 | 争论 |
|---|---|
| 匹配值 | $compare, $strict = false |
此函数比较 $compare 中的数据是否与 $compare 中的数据相同。
如果 $compare 是字符串或数字,则使用“==”比较数据类型。
如果 $strict 为 false,则忽略类型进行比较,也使用“=”比较数据。
如果 `$compare` 是一个数组,则遍历该数组,并逐个执行比较,包括使用 `==` 进行类型比较。
如果找到完全相同的元素,则验证通过。
如果 `$strict` 为 false,则执行忽略类型的比较,使用 `=`。
匹配模式
| 规则名称 | 争论 |
|---|---|
| 匹配模式 | 模式 |
这演示了如何使用 `preg_match` 函数和正则表达式进行模式匹配。
Beyond Co., Ltd. 的文章“使用 Fuelphp 的 fieldset 快速、优雅且灵活地生成输入表单”,了解更多信息。
匹配字段
| 规则名称 | 争论 |
|---|---|
| 匹配字段 | $field |
将与 $field 指定的字段进行比较,包括类型检查。
由于此规则不支持严格模式,因此仅当结果为“==="”或空字符串时才会通过。
匹配集合
| 规则名称 | 争论 |
|---|---|
| 匹配集合 | $collection = array(), $strict = false |
如果 `$collection` 是一个数组,则使用 `in_array` 函数将其与数组中的值进行比较。
如果 `$strict` 为真,则将 `in_array` 函数的第三个参数设置为真,并执行包含类型检查的严格比较。
如果 `$collection` 不是数组,则所有给定的参数都会被放入一个数组中,然后使用 `in_array` 函数进行比较。
例如,如果参数是“1, true, 2, 'test3'”,即使您在表单中输入 1,它也不会通过验证,因为 `$strict` 被设置为 true(因为通过 POST 发送的数字会被视为字符串)。
实际上,唯一能通过此验证的字符串是 `test3`。
此外,如果将数据“1, 'true', 2, 'test3'”作为参数传递,虽然 $strict 似乎被设置为 true,但由于它不是布尔值,因此比较操作将不进行类型检查。
所以,在验证通过 POST 发送的数据时,“true”和“test3”都会通过验证。
规范不清楚,难以理解,而且它的行为与match_value 规则,因此在 $collection 中将其与数组以外的数据一起使用可能会导致意想不到的陷阱。
最小长度
| 规则名称 | 争论 |
|---|---|
| 最小长度 | 长度 |
如果字符串长度大于或等于 $length,则验证通过。
即使长度为 0(即空字符串),验证也通过,因此将 $length 设置为 1 并不会验证它是否为必填字段。
最大长度
| 规则名称 | 争论 |
|---|---|
| 最大长度 | 长度 |
如果字符串长度小于或等于 $length,则测试通过。
精确长度
| 规则名称 | 争论 |
|---|---|
| 精确长度 | 长度 |
如果字符串长度为 $length,则此操作通过。
如果长度为 0(即空字符串),此操作也通过,因此它通常可以与 required 结合使用。
有效日期
| 规则名称 | 争论 |
|---|---|
| 有效日期 | $format = null, $strict = true |
此函数验证给定的字符串是否符合日期和时间格式。
虽然空字符串显然会通过验证,但如果您只阅读文档,很容易忽略无需显式指定 `$format` 的事实。
如果您为 `$format` 设置了格式,`date_parse_from_format` 函数将根据该格式进行解析。
如果 `$format` 为 null,则 `date_parse` 函数将对其进行解析,因此您无需硬编码格式(尽管存在数据可能被错误解析为日期的情况)。
将 $format 设置为 null 的优点是,它允许规则同时传递“Ymd”和“Y/m/d”。
有效邮箱
| 规则名称 | 争论 |
|---|---|
| 有效邮箱 | 没有任何 |
`filter_var` 函数用于验证字符串是否为有效的电子邮件地址。
使用 `filter_var` 函数验证电子邮件地址比使用 `preg_match` 函数运行自定义正则表达式要安全得多。
有效邮箱
| 规则名称 | 争论 |
|---|---|
| 有效邮箱 | 分隔符(可选) |
使用 explode 函数根据 $separator 中设置的字符串分解输入数据后,循环验证 valid_email 规则。
$separator 的默认值为 ","。
有效网址
| 规则名称 | 争论 |
|---|---|
| 有效网址 | 没有任何 |
`filter_var` 函数用于验证字符串是否为有效的 URL。`filter_var`
函数的一个缺陷是,即使是有效的 URL,包含多字节字符的 URL 也无法通过验证。
有效IP
| 规则名称 | 争论 |
|---|---|
| 有效IP | 没有任何 |
`filter_var` 函数用于验证字符串是否为有效的 IP 地址。
它可以验证 IPv4 和 IPv6 地址。
数值最小值
| 规则名称 | 争论 |
|---|---|
| 数值最小值 | 最小值 |
此函数验证输入值是否大于或等于 $min_val(数值类型)。
内部会将输入值和 $min_val 转换为浮点数进行比较,因此也可以比较十进制数。
数值最大值
| 规则名称 | 争论 |
|---|---|
| 数值最大值 | $max_val |
此函数验证输入值是否小于或等于 $max_val(数值类型)。
内部会将输入值和 $max_val 转换为浮点数进行比较,因此也可以比较十进制数。
数值介于
| 规则名称 | 争论 |
|---|---|
| 数值介于 | 最小值,最大值 |
验证输入值是否大于等于 $min_val 且小于等于 $max_val。
它同时验证了 numeric_min 和 numeric_max 规则。
有效字符串
| 规则名称 | 争论 |
|---|---|
| 有效字符串 | $flags = array('alpha', 'utf8') |
只需选择规则,即可构建和验证通用正则表达式。
`match_pattern`也能实现类似的效果,但对于更简单的正则表达式,由于无需阅读正则表达式本身,因此可能更容易理解。
存储在 `$flags` 数组中的可能字符串如下:
| 旗帜 | 目标角色 |
|---|---|
| 阿尔法 | 大写和小写字母 |
| 数字 | 数字 0-9 |
| 特价 | 按字母顺序(字符串模式与 [:alpha:] 匹配) |
| 空间 | 半宽空间 |
| 换行符 | \r \n |
| 标签 | \t |
| 标点 | . , ! ? : ; & |
| 单引号 | ' |
| 双引号 | " |
| 破折号 | _ - |
| 正斜杠 | / |
| 反斜杠 | \ |
| 括号 | [ ] |
| 牙套 | ( ) |
| utf8 | { } |
在内部,这些规则会被组合起来构建正则表达式。
虽然你需要在一个数组中指定多个规则,但如果输入数据格式固定,还有一个隐藏功能可以根据数据格式自动设置规则。
对于 URL,只需设置“$flags = 'url_safe'”即可设置三个标志:'alpha'、'numeric' 和 'dashes'。
这类规则(或者说规则集,即多条规则的集合?)实际上作为一项隐藏功能存在。
| 规则集名称 | 待制定的规则 |
|---|---|
| 阿尔法 | alpha,utf8 |
| 字母数字 | 字母、UTF-8、数字 |
| 特价 | 特殊,utf8 |
| url_safe | 字母、数字、破折号 |
| 整数,数值 | 数字 |
| 漂浮 | 数字,点 |
| 引号 | 单引号,双引号 |
| 斜杠 | 正斜杠,反斜杠 |
| 全部 | 字母、UTF-8编码、数字、特殊字符、空格、换行符、制表符、标点符号、单引号、双引号、破折号、正斜杠、反斜杠、方括号、花括号 |
“所有人”的绝望程度令人难以置信(我什么时候才能用上这个呢)。
就这样。
1
