thinkPHP5使用验证器规则between时所遇问题

先看示例:

<?php

namespace app\index\validate;
use think\Validate;

class User extends Validate
{
    protected $rule = [
        'email' =>  'email',
        'name'  =>  'chsDash|between:2,12',
    ];

    protected $message = [
        'email' =>  '邮箱格式错误',
        'name.chsDash'  => '昵称只允许汉字、字母、数字和下划线_及破折号-',
        'name.between'  => '昵称长度只能在2-12之间',
    ];

    protected $scene = [
        'email' => ['email'],
        'add'   => ['name'],
    ];

}
<?php

namespace app\index\controller;
use think\Controller;

class Test extends Controller
{
    public function index(){
        $data = ['name' => '123456'];

        $validate = validate('User');

        if(!$validate->scene('add')->check($data)){
            dump($validate->getError());
        }
    }

}

按上述代码,页面模板显示如下:

随后又将name改为了字母,汉字,长度不一,各种测试。

结果显示,在name等于2~12之间时,才不会报错。

之所以如此,是因为我误解了between的用法,between的作用只能验证数字是否在规定的范围内,并不能验证字符的长短。

length才是检验字符串长短的

修改代码如下:

<?php

namespace app\index\validate;
use think\Validate;

class User extends Validate
{
    protected $rule = [
        'email' =>  'email',
        'name'  =>  'chsDash|length:2,12',
    ];

    protected $message = [
        'email' =>  '邮箱格式错误',
        'name.chsDash'  => '昵称只允许汉字、字母、数字和下划线_及破折号-',
        'name.length'  => '昵称长度只能在2-12之间',
    ];

    protected $scene = [
        'email' => ['email'],
        'add'   => ['name'],
    ];

}

总结:一定要仔细阅读开发文档,避免下意识决断