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 相关文章推荐
分享PHP header函数使用教程
Sep 05 PHP
php中的PHP_EOL换行符详细解析
Oct 26 PHP
php获取文件内容最后一行示例
Jan 09 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
PHP的拦截器实例分析
Nov 03 PHP
PHP 读取和编写 XML
Nov 19 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
May 13 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP文件打开关闭及读写操作示例解析
Aug 06 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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
phplot生成图片类用法详解
2015/01/06 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
JS location几个方法小姐
2008/07/09 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
Python测试网络连通性示例【基于ping】
2018/08/03 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
Python shutil模块用法实例分析
2019/10/02 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
PHP两种查询函数array/row的区别
2013/06/03 面试题
护理职业应聘自荐书
2013/09/29 职场文书
护理自荐信
2013/10/22 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
庆七一宣传标语
2014/10/08 职场文书
纪委立案决定书
2015/06/24 职场文书
电工实训心得体会
2016/01/14 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang