laravel 数据验证规则详解


Posted in PHP onOctober 23, 2019

如下所示:

return [
  'accepted' => '必须为yes,on,1,true',
  'active_url' => '是否是一个合法的url,基于PHP的checkdnsrr函数,因此也可以用来验证邮箱地址是否存在',
  'after:date' => '验证字段必须是给定日期后的值,比如required|date|after:tomorrow,通过PHP函数strtotime来验证',
  'after_or_equal:date' => '大于等于',
  'alpha' => '验证字段必须全是字母',
  'alpha_dash' => '验证字段可能具有字母、数字、破折号、下划线',
  'alpha_num' => '验证字段必须全是字母和数字',
  'array' => '数组',
  'before:date' => '小于',
  'before_or_equal:date' => '小于等于',
  'between:min,max' => '给定大小在min,max之间,字符串,数字,数组或者文件大小都用size函数评估',
  'boolean' => '必须为能转化为布尔值的参数,比如:true,false,1,0,"1","0"',
  'confirmed' => '字段必须与foo_confirmation字段值一致,比如,要验证的是password,输入中必须存在匹配的password_confirmation字段',
  'date' => '通过strtotime校验的有效日期',
  'date_equals:date' => '等于',
  'date_format:format' => 'date和date_format不应该同时使用,按指定时间格式传值',
  'different:field' => '验证的字段值必须与字段field的值相同',
  'digits:value' => '必须是数字,并且有确切的值',
  'digits_between:min,max' => '字段长度必须在min,max之间',
  'dimensions' => '验证的文件是图片并且图片比例必须符合规则,比如dimensions:min_width=100,min_height=200,可用
          的规则有min_width,max_width,min_height,max_height,width,height,ratio',
  'distinct' => '无重复值',
  'email' => '符合e-mail地址格式',
  'exists:table,column' => '必须存在于指定的数据库表中',
  'file' => '成功上传的文件',
  'filled' => '验证的字段存在时不能为空',
  'image' => '验证的文件必须是图像,jpeg,png,bmp,gif,svg',
  'in:foo,bar,...' => '验证的字段必须包含在给定的值列表中',
  'in_array:anotherfield' => '验证的字段必须存在于另一个字段的值中',
  'integer' => '整数',
  'ip' => 'ip地址',
  'ipv4' => 'ipv4地址',
  'ipv6' => 'ipv6地址',
  'json' => 'json字符串',
  'max:value' => '大于',
  'mimetypes:text/plain,...' => '验证的文件必须与给定的MIME类型匹配',
  'mimes:foo,bar,...' => '验证的文件必须具有列出的其中一个扩展名对应的MIME类型',
  'min:value' => '小于',
  'nullable' => '可为null,可以包含空值的字符串和整数',
  'not_in:foo,bar...' => '不包含',
  'numeric' => '必须为数字',
  'present' => '验证的字段必须存在于输入数据中,但可以为空',
  'regex:pattern' => '验证的字段必须与给定正则表达式匹配',
  'required' => '验证的字段必须存在于输入数据中,但不可以为空',
          //以下情况视为空:1.该值为null,2.空字符串,3.空数组或空的可数对象,4.没有路径的上传文件
  'required_if:anotherfield,value,...' => '如果指定的anotherfield等于value时,被验证的字段必须存在且不为空',
  'required_unless:anotherfield,value,...' => '如果指定的anotherfield等于value时,被验证的字段不必存在',
  'required_with:foo,bar,...' => '只要指定的其它字段中有任意一个字段存在,被验证的字段就必须存在且不为空',
  'required_with_all:foo,bar,...' => '当指定的其它字段必须全部存在时,被验证的字段才必须存在且不为空',
  'required_without_all:foo,bar,...' => '当指定的其它字段必须全部不存在时,被验证的字段必须存在且不为空',
  'required_without:foo,bar,...' => '当指定的其它字段有一个字段不存在,被验证的字段就必须存在且不为空',
  'same:field' => '给定字段必须与验证字段匹配',
  'size:value' => '验证字段必须具有与给定值匹配的大小,对字符串,value对应字符数;对数字,对应给定的
          整数值;对数组,对应count值;对文件,是文件大小(kb)',
  'timezone' => '验证字段是有效的时区标识符,根据PHP函数timezone_identifiers_list判断',
  'unique:table,column,except,idColumn' => '验证字段必须是数据库中唯一的',
  'url' => '有效的url',
];

简单例子

return [
  'title.required' => 'A title is required',
  'body.required' => 'A message is required',
  'avatar' => [
    'required',
    Rule::dimensions()->maxWidth(500)->maxHeight(250)->ratio(3/2), //限制图片大小和比例
  ],
  'foo.*.id' =>'distinct', //不允许重复
  'state' =>'exists:states', //指定表
  'state1' => 'exists:states,abbreviation', //指定表和字段
  'email' => 'exists:connection.staff,email', //指定查询的数据库
  'email1' => [
    'required',
    Rule::exists('staff')->where(function ($query){
      $query->where('account_id',1);
    }),
  ],
  'zones' => [
    'required',
    Rule::in(['first-zone','second-zone']),
  ],
  'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime',
  'photo' => 'mimes:jpeg,bmp,png', //验证文件扩展名,规则上也会验证文件的MIME类型,通过读取文件的内容以猜测它的MIME类型
  'toppings' => [
    'required',
    Rule::notIn(['sprinkles','cherries']),
  ],
  //当使用regex时,必须使用数组,而不是|分隔符,特别是正则中有|时
  'email2' => 'unique:users,email_address',
  'email3' => 'unique:connection.users,email_address', //指定数据库
  'email4' => Rule::unique('users')->where(function ($query){
    $query->where('account_id',1);
  }),
  'custom' => [
    'person.*.email' => [
      'unique' => 'each person must have a unique e-mail address',
    ]
  ],
];

特殊例子

//验证时忽视id
Validator::make($data,[
  'email' => [
    'required',
    Rule::unique('users')->ignore($user->id,'user_id'),
  ]
]);

//在某些情况下,只有在该字段存在于输入数组中时,才可以对字段执行验证检查
$v = Validator::make($data,[
  'email' => 'sometimes|required|email',//email只有在data数组中时才会被验证
]);

$z = Validator::make($data,[
  'email' => 'required|email',
  'games' => 'required|numeric',
]);
$z->sometimes('reason','required|max:500',function ($input){
  return $input->games >= 100; //当值超过100时,reson才必填
});
$z->sometimes(['reson','cost'],'required',function ($input){
  return $input->games >= 100;
});
$validator = Validator::make($request->all(),[
  'photos.profile' => 'required|image',//验证数组中的某个key的值
]);

$validator = Validator::make($request->all(),[
  'person.*.email' => 'email|unique:users',
  'person.*.first_name' => 'required_with:person.*.last_name',
]);//验证指定数组输入字段中的每一个email都是唯一的

$request->validate([
  'name' => ['required', new Uppercase()],
]);
$validator = Validator::make($this->request,[
  'title' => 'required|unique:posts|max:255',
  'body' => 'required',
])->validate();

$validator->after(function ($validator){
  if ($this->somethingElseIsInvalid()) {
    $validator->errors()->add('field', 'Something is wrong with this field!');
  }
});

if ($validator->fails()){

}

$errors = $validator->errors();
echo $errors->first('email');

//以数组形式获取指定字段的所有错误消息
foreach ($errors->get('email') as $message){

}

//验证表单的数组字段,获取数组元素的所欲错误消息
foreach ($errors->get('attachments.*') as $message){

}

//查看所有字段的错误消息
foreach ($errors->all() as $message){

}

// 检测一个字段是否有错误消息
if ($errors->has('email')){

}

以上这篇laravel 数据验证规则详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
PHP中$_SERVER的详细参数与说明
Jul 29 PHP
php htmlspecialchars加强版
Feb 16 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
php对数组排序代码分享
Feb 24 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 PHP
php适配器模式简单应用示例
Oct 23 #PHP
Laravel 自定命令以及生成文件的例子
Oct 23 #PHP
laravel 创建命令行命令的图文教程
Oct 23 #PHP
php桥接模式应用案例分析
Oct 23 #PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 #PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 #PHP
基于laravel缓冲cache的用法详解
Oct 23 #PHP
You might like
php实现mysql同步的实现方法
2009/10/21 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
动态生成的DOM不会触发onclick事件的原因及解决方法
2016/08/06 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
Python实现微信机器人的方法
2019/09/06 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
出纳会计岗位职责
2014/03/12 职场文书
铅球加油稿100字
2014/09/26 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
PHP解决高并发问题
2021/04/01 PHP
Nginx进程管理和重载原理详解
2021/04/22 Servers
浅谈Python项目的服务器部署
2021/04/25 Python
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers