再用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

打完收工!