再用Thinkphp开发框架做项目的时候,数据安全的校验非常重要,下面整理了一下Thinkphp自带的验证规则及方式:
一、基础数据校验示例
<?php
namespace app\validate;
use think\Validate;
class User extends Validate
{
protected $rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
protected $message = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.number' => '年龄必须是数字',
'age.between' => '年龄只能在1-120之间',
'email' => '邮箱格式错误',
];
}
二、自定义验证规则校验
class User extends Validate
{
protected $rule = [
'name' => 'checkName:thinkphp',
'email' => 'email',
];
protected $message = [
'name' => '用户名必须',
'email' => '邮箱格式错误',
];
// 自定义验证规则
protected function checkName($value, $rule, $data=[])
{
return $rule == $value ? true : '名称错误';
}
}
三、验证规则的写法
protected $rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email'
];
或者是这样:
protected $rule = [
'name' => ['require', 'max' => 25, 'regex' => '/^[\w|\d]\w+/'],
'age' => ['number', 'between' => '1,120'],
'email' => 'email',
];
四、内置验证规则
1、必须
'name'=>'require' // 必填
2、数字
'num'=>'number' // 不包含负数和小数点
'num'=>'integer' // 整数
'num'=>'float' // 浮点数字
3、Bool值
'num'=>'boolean'
4、邮箱
'email'=>'email'
5、数组
'info'=>'array'
6、日期
'date'=>'date'
7、纯字母
'name'=>'alpha' // 純字母
8、字母和数字
'name'=>'alphaNum' // 字母和数字
9、字母、数字、下划线、破折号
'name'=>'alphaDash' // 字母和数字,下划线_及破折号-
10、只能是汉字
'name'=>'chs' // 必须是汉字
11、汉字和字母
'name'=>'chsAlpha'
12、汉字、字母和数字
'name'=>'chsAlphaNum'
13、汉字、字母、数字、下划线、破折号
'name'=>'chsDash'
14、小写
'name'=>'lower' // 只能是小写
15、大写
'name'=>'upper' // 只能是大写
16、URL
'url'=>'url'
17、IP
'ip'=>'ip'
18、手机号
'mobile'=>'mobile'
19、身份证号
'id_card'=>'idCard'
20、长度和区间
'num'=>'in:1,2,3' // 验证某个字段的值是否在某个范围
'num'=>'notIn:1,2,3' // 验证某个字段的值不在某个范围
'num'=>'between:1,10' // 验证某个字段的值是否在某个区间
'num'=>'notBetween:1,10' // 验证某个字段的值不在某个范围
'name'=>'length:4,25' // 验证某个字段的值的长度是否在某个范围
'name'=>'length:4' // 指定长度
'name'=>'max:25' // 最大长度
'name'=>'min:5' // 最小长度
21、验证重复密码
'repassword'=>'require|confirm:password' // 验证某个字段是否和另外一个字段的值一致
22、验证一致
'name'=>'require|different:account' // 验证某个字段是否和另外一个字段的值不一致
23、数值验证
// 验证是否等于某个值
'score'=>'eq:100'
'num'=>'=:100'
'num'=>'same:100'
// 验证是否大于等于某个值
'score'=>'egt:60'
'num'=>'>=:100'
// 验证是否大于某个值
'score'=>'gt:60'
'num'=>'>:100'
// 验证是否小于等于某个值
'score'=>'elt:100'
'num'=>'<=:100'
// 验证是否小于某个值
'score'=>'lt:100'
'num'=>'<:100'
// 字段比较
'price'=>'lt:market_price'
'price'=>'<:market_price'
24、正则验证
// 直接使用正则
'zip'=>'\d{6}',
// 或者
'zip'=>'regex:\d{6}',
'accepted'=>['regex'=>'/^(yes|on|1)$/i'],
// 也可以这样
'zip' => 'regex:zip',
25、唯一验证 常用于:字段唯一校验
'name' => 'unique:user', // 表示验证name字段的值是否在user表(不包含前缀)中唯一
'name' => 'unique:user,account', // 验证其他字段
'name' => 'unique:user,account,10', // 排除某个主键值
'name' => 'unique:user,account,10,user_id', // 指定某个主键值排除
复杂唯一校验
'name' => 'unique:user,status^account', // 多个字段验证唯一验证条件
'name' => 'unique:user,status=1&account='.$data['account'], // 复杂验证条件
以上列举常见的25种校验,更多使用规则见官方文档:
https://www.kancloud.cn/manual/thinkphp6_0/1037629
打完收工!