1. 简介
在实际开发过程中,经常会遇到需求需要对某些输入框进行特定规则的验证。ThinkPHP框架提供了一些基本的验证规则,但是有些复杂的规则需要我们自己来定义。这时就需要用到自定义验证规则。
2. 自定义规则
ThinkPHP规定,自定义规则需要在应用的'extend'目录下新建一个Validation.php类。该类要继承framework目录下的Validate类。然后在自定义规则中使用rule方法来定义规则。
namespace app\extend;
use think\Validate;
class Validation extends Validate
{
protected $rule = [
'phone' => 'require|checkPhone',
];
//自定义的规则,手机格式
protected function checkPhone($value)
{
$isMob = "/^1[3456789]{1}\d{9}$/";
$isTel = "/^([0-9]{3,4}-)?[0-9]{7,8}$/";
if (preg_match($isMob, $value) || preg_match($isTel, $value)) {
return true;
} else {
return '手机格式不正确!';
}
}
}
2.1 自定义规则说明
我们在Validation类中使用rule方法来定义规则,其中$key是要验证的键名,$rule是键值对应的规则数组。在上面的例子中,我们自定义了一个手机验证的规则,它的键名为phone。其中涉及到“正则表达式”的知识,常见的“正则表达式”可以参见这个地址:https://www.runoob.com/regexp/regexp-syntax.html
2.2 自定义规则调用
在使用自定义验证规则时,我们需要在验证规则调用中指定Validation类:
use app\extend\Validation;
$data = [
'phone' => '15812345678',
];
$validate = new Validation;
if (!$validate->check($data)) {
dump($validate->getError());
}
如上例所示,我们需要在验证过程中使用use关键字来引入Validation类。然后在验证函数中新建一个Validation对象,并在check方法中传入要验证的数组。在验证失败时,我们可以通过getError方法来获取验证器的错误信息。