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脚本的10个技巧(7)
Oct 09 PHP
php getsiteurl()函数
Sep 05 PHP
PHP 将图片按创建时间进行分类存储的实现代码
Jan 05 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
PHP资源管理框架Assetic简介
Jun 12 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
yii的CURD操作实例详解
Dec 04 PHP
php简单判断文本编码的方法
Jul 30 PHP
详解PHP对数组的定义以及数组的创建方法
Nov 27 PHP
PHP-CGI远程代码执行漏洞分析与防范
May 07 PHP
php微信公众号开发之翻页查询
Oct 20 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 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 array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
python dict remove数组删除(del,pop)
2013/03/24 Python
Python运算符重载用法实例
2015/05/28 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
美国牛仔品牌:True Religion
2018/11/16 全球购物
女性时尚在线:IVRose
2019/02/23 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
政治思想表现评语
2014/05/04 职场文书
人事任命书范文
2014/06/04 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
建议书范文
2015/02/05 职场文书
护理培训心得体会
2016/01/22 职场文书
自荐信大全
2019/03/21 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
深入理解python多线程编程
2021/04/18 Python
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript
解决IDEA翻译插件Translation报错更新TTK失败不能使用
2022/04/24 Python