【PHP】TP5验证规则自定义

目录

概述

独立验证

静态调用

内置规则

参考文档


概述


ThinkPHP5.0验证使用独立的\think\Validate类或者验证器进行验证。

独立验证


$rule = ['name'  => 'require|max:25','age'   => 'number|between:1,120','email' => 'email',
];$msg = ['name.require' => '名称必须','name.max'     => '名称最多不能超过25个字符','age.number'   => '年龄必须是数字','age.between'  => '年龄只能在1-120之间','email'        => '邮箱格式错误',
];$field = ['name'  => '名称','age'   => '年龄','email' => '邮箱',	
];$data = ['name'  => 'thinkphp','age'   => 10,'email' => 'thinkphp@qq.com',
];$validate = new Validate($rule, [] , $field);
if (!$validate->check($data)) {dump($validate->getError());
}

静态调用


// 日期格式验证
Validate::dateFormat('2016-03-09','Y-m-d'); // true
// 验证是否有效的日期
Validate::is('2016-06-03','date'); // true
// 验证是否有效邮箱地址
Validate::is('thinkphp@qq.com','email'); // true
// 验证是否在某个范围
Validate::in('a',['a','b','c']); // true
// 验证是否大于某个值
Validate::gt(10,8); // true
// 正则验证
Validate::regex(100,'\d+'); // true

内置规则


# 验证某个字段必须
'name'=>'require'# 验证某个字段的值是否为数字(采用filter_var验证),例如:
'num'=>'number'# 验证某个字段的值是否为整数(采用filter_var验证)
'num'=>'integer'# 验证某个字段的值是否为浮点数字(采用filter_var验证)
'num'=>'float'# 验证某个字段的值是否为布尔值(采用filter_var验证)
'num'=>'boolean'# 验证某个字段的值是否为email地址(采用filter_var验证)
'email'=>'email'# 验证某个字段的值是否为数组
'info'=>'array'# 验证某个字段是否为为 yes, on, 或是 1。这在确认"服务条款"是否同意时很有用,例如:
'accept'=>'accepted'# 验证值是否为有效的日期
'date'=>'date'# 验证某个字段的值是否为纯字母,
'name'=>'alpha'# 验证某个字段的值是否为字母和数字,
'name'=>'alphaNum'# 验证某个字段的值是否为字母和数字,下划线_及破折号-,
'name'=>'alphaDash'# 验证某个字段的值只能是汉字,
'name'=>'chs'# 验证某个字段的值只能是汉字、字母,
'name'=>'chsAlpha'# 验证某个字段的值只能是汉字、字母和数字,
'name'=>'chsAlphaNum'# 验证某个字段的值只能是汉字、字母、数字和下划线_及破折号-,
'name'=>'chsDash'# 验证某个字段的值只能是控制字符(换行、缩进、空格),
'name'=>'cntrl'# 验证某个字段的值只能是可打印字符(空格除外),
'name'=>'graph'# 验证某个字段的值只能是可打印字符(包括空格),
'name'=>'print'# 验证某个字段的值只能是小写字符,
'name'=>'lower'# 验证某个字段的值只能是大写字符,
'name'=>'upper'# 验证某个字段的值只能是空白字符(包括缩进,垂直制表符,换行符,回车和换页字符),
'name'=>'space'# 验证某个字段的值只能是十六进制字符串,
'name'=>'xdigit'# 验证某个字段的值是否为有效的域名或者IP,
'host'=>'activeUrl'# 验证某个字段的值是否为有效的URL地址(采用filter_var验证),
'url'=>'url'# 验证某个字段的值是否为有效的IP地址(采用filter_var验证),
'ip'=>'ip'# 验证某个字段的值是否为指定格式的日期,
'create_time'=>'dateFormat:y-m-d'# 验证某个字段的值是否为有效的手机,
'mobile'=>'mobile'# 验证某个字段的值是否为有效的身份证格式,
'id_card'=>'idCard'# 验证某个字段的值是否为有效的MAC地址,
'mac'=>'macAddr'# 验证某个字段的值是否为有效的邮政编码,
'zip'=>'zip'# 验证某个字段的值是否在某个范围,
'num'=>'in:1,2,3'# 验证某个字段的值不在某个范围,
'num'=>'notIn:1,2,3'# 验证某个字段的值不在某个范围,
'num'=>'between:1,10'# 验证某个字段的值的长度是否在某个范围
'name'=>'length:4,25'# 验证某个字段的值的最大长度,
'name'=>'max:25'# 验证某个字段的值的最小长度
'name'=>'min:5'# 验证某个字段的值是否在某个日期之后,
'begin_time' => 'after:2016-3-18',# 验证某个字段的值是否在某个日期之前,
'end_time' => 'before:2016-10-01',# 验证当前操作(注意不是某个值)是否在某个有效日期之内,
'expire_time' => 'expire:2016-2-1,2016-10-01',# 验证当前请求的IP是否在某个范围,
'name' => 'allowIp:114.45.4.55',# 验证当前请求的IP是否禁止访问
'name' => 'denyIp:114.45.4.55',# 验证某个字段是否和另外一个字段的值一致,
'repassword'=>'require|confirm:password'# 支持字段自动匹配验证规则,如password和password_confirm是自动相互验证的,只需要使用
'password'=>'require|confirm'# 验证某个字段是否和另外一个字段的值不一致,
'name'=>'require|different:account'# 验证是否等于某个值,
'score'=>'eq:100'
'num'=>'=:100'
'num'=>'same:100'# 验证是否大于等于某个值,
'score'=>'egt:60'
'num'=>'>=:100'# 验证是否大于某个值
'score'=>'gt:60'
'num'=>'>:100'# 验证是否小于等于某个值,
'score'=>'elt:100'
'num'=>'<=:100'# 验证是否小于某个值,
'score'=>'lt:100'
'num'=>'<:100'# 验证对比其他字段大小(数值大小对比)
'price'=>'lt:market_price'
'price'=>'<:market_price'# 支持使用filter_var进行验证,
'ip'=>'filter:validate_ip'# 支持直接使用正则验证,
'zip'=>'\d{6}',
// 或者
'zip'=>'regex:\d{6}',
'accepted'=>['regex'=>'/^(yes|on|1)$/i'],# file:验证是否是一个上传文件
# image:width,height,type:验证是否是一个图像文件,width height和type都是可选,width和height必须同时定义。
# fileExt:允许的文件后缀
# fileMime:允许的文件类型
# fileSize:允许的文件字节大小# 验证当前请求的字段值是否为唯一的,
# unique:table,field,except,pk
// 表示验证name字段的值是否在user表(不包含前缀)中唯一
'name' => 'unique:user',
// 验证其他字段
'name' => 'unique:user,account',
// 排除某个主键值
'name' => 'unique:user,account,10',
// 指定某个主键值排除
'name' => 'unique:user,account,10,user_id',# 如果需要对复杂的条件验证唯一
// 多个字段验证唯一验证条件
'name' => 'unique:user,status^account',
// 复杂验证条件
'name' => 'unique:user,status=1&account='.$data['account'],# 验证某个字段的值等于某个值的时候必须
// 当account的值等于1的时候 password必须
'password'=>'requireIf:account,1'# 验证某个字段有值的时候必须
// 当account有值的时候password字段必须
'password'=>'requireWith:account'# 验证当某个callable为真的时候字段必须,
// 使用check_require方法检查是否需要验证age字段必须
'age'=>'requireCallback:check_require|number'

参考文档


  • 内置规则 · ThinkPHP5.0完全开发手册 · 看云

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/231524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恒创:多链路负载均衡是什么意思

多链路负载均衡是一种网络架构技术&#xff0c;它通过将流量分散到多个网络链路上&#xff0c;以提高网络的性能和可靠性。这种技术可以应用于各种场景&#xff0c;如数据中心、云计算、企业网络等。 在多链路负载均衡中&#xff0c;流量被分配到多个网络链路上&#xff0c;以…

【深度学习目标检测】十、基于yolov5的火灾烟雾识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

MySQL! 一个开源的关系型数据库管理系统!

MySQL! 一个开源的关系型数据库管理系统! MySQL是一个开源的关系型数据库管理系统&#xff0c;广泛应用于各种场景&#xff0c;如网站、企业应用等。了解和配置MySQL数据库是每个开发人员的基本技能之一。本文将详细介绍MySQL的基本概念、安装、配置和使用。 一、MySQL基本概…

物联网对接使用蓝牙还是WiFi,应该如何选择?

蓝牙是一种无线技术协议&#xff0c;可促进连接设备之间短距离的数据交换。它依赖于物理邻近性并使用2.400至2.485 GHz之间的UHF&#xff08;超高频&#xff09;无线电波。蓝牙旨在创建个人区域网络&#xff08;PAN&#xff09;并在笔记本电脑、智能手机和外围设备等计算设备之…

Unity SRP 管线【第四讲:URP 阴影】

URP 全文源码解析参照 引入 在UniversalRenderer.cs/ line 505行处 此处已经准备好了所有渲染数据&#xff08;所有数据全部存储在了renderingData中&#xff09; 我们只用renderingData中的数据初设置mainLightShadows bool mainLightShadows m_MainLightShadowCasterPass…

深度学习 计算预测和真实值之间的差异

要计算预测和真实值之间的差异&#xff0c;可以首先将真实值加载到一个 pandas DataFrame 中&#xff0c;然后将预测值和真实值连接在一起&#xff0c;最后计算它们的差异。以下是一个示例代码&#xff1a;python import pandas as pd# 假设真实数据保存在 real_data_df 中&am…

【MAC】M2 安装mysql

一、docker下载地址 下载地址 二、安装docker完成 三、安装mysql 一、拉取镜像 # 拉取镜像 docker pull mysql# 或者 docker pull mysql:latest# 以上两个命令是一致的&#xff0c;默认拉取的就是 latest 版本的# 我们还可以用下面的命令来查看可用版本&#xff1a; docker…

Docker介绍,Docker安装

docker镜像仓库官网 一、Docker的基本概念 1.Docker的三大核心组件 docker 镜像 --------docker images docker 仓库---------docker registeries docker 容器---------docker containers 2.Docker 镜像 Docker镜像是运行docker容器时的只读模板&#xff0c;每一个镜像由一…

【Transformer】Transformer and BERT(1)

文章目录 TransformerBERT 太…完整了&#xff01;同济大佬唐宇迪博士终于把【Transformer】入门到精通全套课程分享出来了&#xff0c;最新前沿方向 学习笔记 Transformer 无法并行&#xff0c;层数比较少 词向量生成之后&#xff0c;不会变&#xff0c;没有结合语境信息的情…

数据加密标准DES硬件实现(Modelsim)

数据加密标准DES硬件实现 本文内容摘要理论依据和设计内容仿真结果整体代码 本文内容摘要 本文设计并验证了DES的密钥扩展通路&#xff0c;分别采用Round Based方法和Pipeline方法两种方式设计并验证DES的明文通路 理论依据和设计内容 首先&#xff0c;要了解分组密码算法及DE…

STM32为基础的模拟I2C通用8bit和16bit读取以及多字节读取

GPIO模拟I2C驱动的通用代码&#xff0c;I2C的寄存器地址有8位和16位的&#xff0c;主要解决了同一个MCU同时处理8位和16位寄存器地址芯片时候的驱动问题。 typedef enum {IIC_8BIT_BASE_ADDR,IIC_16BIT_BASE_ADDR }iic_bits_e; typedef struct {uint8_t DevAddr;uint16_t RegA…

cdr格式怎么打开?cdr文件查看工具CDR Viewer功能介绍

CDRViewer Pro for Mac是一款专业的矢量图形文件查看器&#xff0c;主要用于打开、浏览和查看CorelDRAW&#xff08;CDR&#xff09;文件。以下是该软件的主要功能和特点&#xff1a; CDR文件支持&#xff1a;CDRViewer Pro可以快速加载和显示CorelDRAW&#xff08;CDR&#x…

【面试】Java最新面试题资深开发-微服务篇(1)

问题九&#xff1a;微服务 什么是微服务架构&#xff1f;它与单体架构相比有哪些优势和劣势&#xff1f;解释一下服务发现和服务注册是什么&#xff0c;它们在微服务中的作用是什么&#xff1f;什么是API网关&#xff08;API Gateway&#xff09;&#xff1f;在微服务中它有何…

大模型(LLM)+词槽(slot)构建动态场景多轮对话系统

构建动态场景多轮对话系统 引言 在人工智能和自然语言处理领域&#xff0c;聊天机器人的开发一直是一个热点话题。近年来&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;的进步&#xff0c;构建能够理解和响应各种用户需求的聊天机器人变得更加可行和强大。本文将介…

Acrel-1000DP分布式光伏系统在某重工企业18MW分布式光伏中应用——安科瑞 顾烊宇

摘 要&#xff1a;分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式以用户侧自发自用、余电上网&#xff0c;且在配电系统平衡调节为特征的光伏发电设施&#xff0c;是一种新型的、具有广阔发展前景的发电和能源综合利用方式&#xff0c;它倡导就近发电&#xff0c;就…

DiffUtil + RecyclerView 在 Kotlin中的使用

很惭愧, 做了多年的Android开发还没有使用过DiffUtil这样解放双手的工具。 文章目录 1 DiffUtil 用来解决什么问题?2 DiffUtil 是什么?3 DiffUtil的使用4 参考文章 1 DiffUtil 用来解决什么问题? 先举几个实际开发中的例子帮助我们感受下: 加载内容流时,第一次加载了ABC,…

gitlab(gitlab-ce)下载,离线安装

目录 1.下载 2.安装 3.配置 4.启动 5.登录 参考&#xff1a; 1.下载 根据服务器操作系统版本&#xff0c;下载对应的RPM包。 gitlab官网&#xff1a; The DevSecOps Platform | GitLab rpm包官网下载地址: gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像地…

JVM-4-垃圾收集基础

引用计数算法 在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 对象objA和objB都有字段instance&#xff0c;赋值…

分布式链路追踪 —— 基于Dubbo的traceId追踪传递

文章目录 原文链接RpcContext 上下文对象Dubbo 过滤器&#xff08;Filter&#xff09;对象基于Dubbo的traceId追踪传递实现 原文链接 RpcContext 上下文对象 在实现 Dubbo 调用之间的链路跟踪之前&#xff0c;先简单了解 RpcContext 上下文对象和 Filter 过滤器对象&#xff…

python排序算法,冒泡排序和快排

对于排序算法中比较知名的两个算法&#xff0c;分别就是冒泡排序和快速排序&#xff0c;在日常学习和使用中都会听到这两种排序算法的名称&#xff0c;这里主要介绍如何使用python来实现这两种排序算法。 冒泡排序的实现&#xff1a;一是从集合第一个元素开始&#xff0c;每两…