1、单独自己写验证规则
//验证规则
protected $rule = [
['nickname','require|min:5','昵称必须|昵称不能少于短于5个字符'],
//['email','email','邮箱格式错误'], //更多 内置规则 http://www.kancloud.cn
['email','checkMail:tengape.com','邮箱格式错误'], //自定义checkMail 验证规则
['birthday','dateFormat:Y-m-d','生日格式错误'],
];
//这里自己写的验证规则是 checkMail 邮箱必须得包含 tengape.com
//验证邮箱格式,是滞符合指定的域名
protected function checkMail($value,$rule){
$result = strstr($value, $rule);
if($result){
return true;
}else{
return '邮箱必须包含'.$rule.' 域名';
}
}
2、在控制器里里面完成验证
public function add(){
$data = input('post.');
$result = $this->validate($data, 'Users'); $data需要验证的数据,'Users'使用哪个验证器
if(true !== $result){
return $result;
}
$users = new Users();
//数据保存
$users->allowField(true)->save($data);
return '用户['.$users->nickname.']新增成功';
}
3、单独验证某个字段
public function add(){
$data = input('post.');
//验证birthday是否有效的日期
$check = Validate::is($data['birthday'],'date');
if(false === $check){
return json('birthday 日期格式非法');
}
$users = new Users();
//数据保存
$users->allowField(true)->save($data);
return '用户['.$users->nickname.']新增成功';
}
4、详细的验证规则
protected function is($value, $rule, $data = [])
{
switch ($rule) {
case 'require':
// 必须
$result = !empty($value) || '0' == $value;
break;
case 'accepted':
// 接受
$result = in_array($value, ['1', 'on', 'yes']);
break;
case 'date':
// 是否是一个有效日期
$result = false !== strtotime($value);
break;
case 'alpha':
// 只允许字母
$result = $this->regex($value, '/^[A-Za-z]+$/');
break;
case 'alphaNum':
// 只允许字母和数字
$result = $this->regex($value, '/^[A-Za-z0-9]+$/');
break;
case 'alphaDash':
// 只允许字母、数字和下划线 破折号
$result = $this->regex($value, '/^[A-Za-z0-9\-\_]+$/');
break;
case 'chs':
// 只允许汉字
$result = $this->regex($value, '/^[\x{4e00}-\x{9fa5}]+$/u');
break;
case 'chsAlpha':
// 只允许汉字、字母
$result = $this->regex($value, '/^[\x{4e00}-\x{9fa5}a-zA-Z]+$/u');
break;
case 'chsAlphaNum':
// 只允许汉字、字母和数字
$result = $this->regex($value, '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]+$/u');
break;
case 'chsDash':
// 只允许汉字、字母、数字和下划线_及破折号-
$result = $this->regex($value, '/^[\x{4e00}-\x{9fa5}a-zA-Z0-9\_\-]+$/u');
break;
case 'activeUrl':
// 是否为有效的网址
$result = checkdnsrr($value);
break;
case 'ip':
// 是否为IP地址
$result = $this->filter($value, [FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6]);
break;
case 'url':
// 是否为一个URL地址
$result = $this->filter($value, FILTER_VALIDATE_URL);
break;
case 'float':
// 是否为float
$result = $this->filter($value, FILTER_VALIDATE_FLOAT);
break;
case 'number':
$result = is_numeric($value);
break;
case 'integer':
// 是否为整型
$result = $this->filter($value, FILTER_VALIDATE_INT);
break;
case 'email':
// 是否为邮箱地址
$result = $this->filter($value, FILTER_VALIDATE_EMAIL);
break;
case 'boolean':
// 是否为布尔值
$result = in_array($value, [true, false, 0, 1, '0', '1'], true);
break;
case 'array':
// 是否为数组
$result = is_array($value);
break;
case 'file':
$result = $value instanceof File;
break;
case 'image':
$result = $value instanceof File && in_array($this->getImageType($value->getRealPath()), [1, 2, 3, 6]);
break;
case 'token':
$result = $this->token($value, '__token__', $data);
break;
default:
if (isset(self::$type[$rule])) {
// 注册的验证规则
$result = call_user_func_array(self::$type[$rule], [$value]);
} else {
// 正则验证
$result = $this->regex($value, $rule);
}
}
return $result;
}