ThinkPHP表单验证规则归纳总结

2023-11-06

格式验证类

require/::isRequire	#不得为空
number/::isNumber	#验证字段是否为纯数字
integer/::isInteger	#验证字段是否为整数
float/::isFloat	#验证字段是否为浮点数
boolean/::isBoolean	#验证字段是否为布尔值
email/::isEmail	#验证字段是否为邮箱格式
array/isArray	#验证字段是否为数组
accepted/isAccepted	#验证字段是否为yes/on
date/isDate	#验证字段是否为有效日期
alpha/isAlpha	#验证字段是否为纯字母
alphaNum/isAlphaNum	#验证字段是否为纯字母数字组合
alphaDash/isAlphaDash	#验证字段是否为字母数字下划线破折号组好
chs/isChs	#验证字段是否为汉字
chsAlpha/isChsAlpha	#验证字段是否为汉字字母
chsAlphaNum/isChsAlphaNum	#验证字段是否为汉字字母和数字
chsDash/isChsDash	#验证字段是否为字母数字下划线破折号组好和汉字
cntrl/isCntrl	#验证字段是否为控制字符(空格、缩进)
graph/isGraph	#验证字段是否为可打印字符(不包括空格)
print/isPrint	#验证字段是否为可打印字符(包括空格)
lower/isLower	#验证字段是否为小写
upper/isUpper	#验证字段是否为大写
space/isSpace	#验证字段是否为空白字符
xdigit/isXdigit	#验证字段是否为十六进制
activeUrl/isActiveUrl	#验证字段是否为有效域名
url/isUrl	#验证字段是否为有效URL地址
ip/isIp	#验证字段是否为有效IP地址
deteFormat:format	#验证字段的日期时间格式
mobile	#验证字段是否为有效手机号
idCard	#验证身份证格式
macAddr	#验证MAC地址格式
zip	#验证有效邮政编码
dateFormat:format #指定格式的日期。case :'at_date'=>'dateFormat:Y-m-d H:i:s'

长度和区间验证类

*注意 length,max, min 三个验证的共同特性

  • 如果验证的数据是数组,则判断数组的长度。
  • 如果验证的数据是File对象,则判断文件的大小。
in #范围,case:'num'=>'in:1,2,3,4'

notIn #不在某个范围。case:'num'=>'notIn:789

between #某个区间。case:'num'=>'between:1,20'

notBetween #不在某个范围。case:'num'=>'notBetween:2,5'

length:num1,num2 #长度是在某个范围 。case:'name'=>'length:6,18' ,指定长度 'name'=>'length:8'

max:number  #最大长度。 case:'name'=>'max:18'

min:number #最小长度。case:'name'=>'min:6'

after:日期  #在某个日期之后。case:'begin_time' => 'after:2021-4-23',

before:日期 #在某个日期之前,例如:'end_time' => 'before:2028-10-01',

expire:开始时间,结束时间 #验证当前操作(不是某个值)是否在某个有效日期之间。case:'expire_time' => 'expire:2021-4-23,2028-10-01',

allowIp:allow1,allow2,... #验证当前请求的IP。case:'name' => 'allowIp:119.25.36.155',

denyIp:allow1,allow2,... #否禁止访问的IP。case:'name' => 'denyIp:114.45.4.55',

比较类

confirm #当前字段与其他字段比较是否一致。case:'repwd'=>'confirm:pwd'

different #当前字段与其他字段比较是否不一致。case:'user_name'=>'different:account'

egt 或者 >= #大于等于。case:'num'=>'egt:80'

gt 或者 > #大于。case:'num'=>'gt:90

elt 或者 <=  #小于等于

lt 或者 < #小于

eq 、= 、same #等于。case:'num'=>'eq:100'、 'num'=>'=:100'、 'num'=>'same:100'

filter  #使用filter_var方式验证。  case:'ip'=>'filter:strip_tags'

【点击详见filter_var】

正则验证

#case:'phone'=>'\d{11}'或者'phone'=>'regex:\d{11}'

上传验证

file #是否是一个上传文件

image:width,height,type #验证图片属性,width height和type都是可选,width和height必须同时定义。

fileExt:允许的文件后缀

fileMime:允许的文件类型

fileSize:允许的文件字节大小

行为验证

#case:'posData'=>'behavior:\app\index\behavior\Check'

其它特殊验证

unique:table,field,except,pk  
验证字段值是否为唯一
验证规则 table,field,except,pk => 数据表,字段名,排除ID,主键名

// 表示验证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'],

requireIf:field,value 验证某个字段的值等于某个值的时候必须

  // 当uid的值等于1的时候 pwd必须
  'pwd'=>'requireIf:uid,1'

requireWith:field 验证某个字段有值的时候必须

  // 当user_name有值的时候pwd字段必须
  'pwd'=>'requireWith:user_name'

requireCallback:callable #验证当某个callable为真的时候字段必须

// 当username为真时验证pwd字段必须
'pwd'=>'requireCallback:username'

案例

<?php
namespace app\admin\validate;
use think\facade\Db;
use think\Validate;

class BankListVal extends Validate
{
    protected $rule = [
        'name|银行名称'    => ['require','max:20','chs'],
        'code|银行logo'   => ['require','alpha','checkLogo'=>"Logo文件不存在"], #checkLogo 自定义验证规则
        'status.between:0,1' => '认证状态异常!' ,
        'msg.requireIf:status,0' => '请输入认证备注!' //当status为0时,msg必填
    ];

    protected $message = [
        'name.max'       => '银行名称不能超过20个字符!',
        'name.chs'       => '银行名称输入不是纯汉字!',
        'code.alpha'     => '银行logo选择有误!'
    ];

    protected $scene = [
        'all' => []
    ];

    protected function checkLogo($value, $rule, $data){
		//自定义验证逻辑**** start
		// ***********
		//$checkLogo = ***
		//自定义验证逻辑**** end	
        if($checkLogo) $rule = true;//验证通过返回true
        return $rule;
    }
}
  • 调用验证
 $validate = new BankListVal();
 $checker = $validate->scene('all')->check($editData);
 if (!$checker) throw new Exception($validate->getError());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ThinkPHP表单验证规则归纳总结 的相关文章

  • 将字符串的第一个字母大写(前面带有特殊字符) - PHP

    我想将字符串大写 例如 hello 我希望我的函数返回 Hello 我尝试过使用 regex 和 preg match 但没有运气 这是我之前的问题 与此相关 preg match 正在匹配两个字符 而它应该只匹配一个字符 https st
  • Laravel 注册成功后如何重定向到上一页?

    现在redirectTo被设定为 home 我想知道如何重定向到上一页 我尝试使用 protected redirectTo URL previous 但我得到解析错误 期待 or 解决这个问题的最佳解决方案是什么 我想我需要重写 redi
  • PHP DBlib PDO 问题

    我正在尝试通过 php 连接到 MSSQL 服务器 但我的 pdo 连接给我带来了困难和我不太理解的错误 我在下面粘贴的代码一周前运行得很好 突然间它就停止了 没有任何人进行任何更改 我仍然可以连接到服务器并直接从命令行运行查询 但我在 p
  • Ajax 与 chrome 扩展

    我将 url 发送到 chrome 扩展中的 php 文件 并需要获得响应 但不起作用 清单 json name Get pages source version 1 0 manifest version 2 description Get
  • 如何将JS/CSS文件包含到Slim框架的模板中?

    我正在使用 Slim 框架开发一个简单的网络应用程序 我遇到了一个可能很简单的问题 我想将静态文件 CSS 和 Javascript 包含到我的模板中 我的项目文件夹结构如下 index php lt where all the routi
  • CodeIgniter/PHP - 从视图内调用视图

    基本上 对于我的网络应用程序 我正在尝试更好地组织它 目前 每次我想加载页面时 我都必须从控制器中执行此操作 如下所示 this gt load gt view subviews template headerview this gt lo
  • WooCommerce 自定义字段 - 多选

    我在 WooCommerce 的结账页面添加额外的字段 我可以添加文本框等基本字段 但需要添加一个 多 选择框 用户可以在其中选择多个项目 我已经弄清楚如何通过代码添加选择框 如下所示 add action woocommerce afte
  • 传递给 Illuminate\Routing\Middleware\ThrottleRequests::addHeaders() 的参数 1 必须是以下实例

    我创建了一个新的中间件来检查用户令牌我创建了中间件然后添加到 kernal php 但是当我尝试访问中间件中的 request 时我收到错误 这是我的中间件代码 namespace App Http Middleware use Illum
  • php/symfony/doctrine 内存泄漏?

    我在使用 symfony 1 4 和原则 1 2 将对象批量插入数据库时 遇到问题 我的模型有一种称为 Sector 的对象 每个对象都有多个 Cupo 类型的对象 通常范围从 50 到 200000 这些物体非常小 只是一个短标识符字符串
  • phpenmod 显示其他 php 版本的路径

    我的 Ubuntu 机器上安装了 php 7 0 和 7 2 当我执行时php v 它告诉我我正在使用 php 7 2 在 Apache 上我还启用了 php 7 2 当我跑步时phpenmode zip 我明白了 WARNING Modu
  • 如何使用 Google Calendar API 和官方 PHP 库创建全天活动?

    我有这个代码 event new Event event gt setSummary event summary event gt setLocation event location start new EventDateTime sta
  • 从 PHP 启动守护进程

    对于网站 我需要能够启动和停止守护进程 我目前正在做的是 exec sudo etc init d daemonToStart start 守护进程已启动 但 Apache PHP 挂起 做一个ps aux透露sudo它本身变成了僵尸进程
  • zend框架验证模型中的数据而不是表单中的数据

    使用 Zend Framework 2 在我的应用程序中 要编辑数据库中的数据 可以编译 html 表单或发送 http post 请求 我的服务器作为 Web 服务实现 在第二种情况下 不会呈现表单 问题 如果当服务器收到不是从表单发送而
  • 如何将路径添加到 Apache PATH 变量?

    我在 apache2 的 custom conf 文件中设置了以下内容 SetEnv PATH PATH opt local lib mysql5 bin this is a test 但是它不起作用 当我打电话时 hey shell ex
  • 如何验证上传的文件是视频?

    我的服务器上有一些非常敏感的信息 因此安全性是一个大问题 用户需要能够上传视频 我知道允许用户上传文件会带来安全威胁 因为没有 100 的方法可以阻止他们上传非视频 但我显然可以选择服务器将保留哪些文件 我知道检查文件扩展名是不够的 检查
  • PHP 搜索部分字符串

    如何在键入时搜索部分字符串 不使用 MySQL 例如 MySQL 中的 LIKE 函数 但在搜索字符串时使用 PHP 例如 但这显然行不通 但是有没有一个函数可以搜索部分字符串 那太好了 EDIT 如果它在数组中怎么办 如果我使用 strp
  • 如何检测iPhone是否有视网膜显示屏?

    如何检测 iPhone 是否配备视网膜显示屏 有靠谱的办法吗 要么是纯 PHP 要么最好是 Zend Framework 方式来执行此操作 我通过这个弄清楚了 var retina window devicePixelRatio gt 1
  • Symfony2 - 在自定义验证器中调用 EmailValidator

    我正在创建一个自定义验证器约束来验证 联系人 类似于 John Doe 电子邮件受保护 gt 遵循Cookbook http symfony com doc current cookbook validation custom constr
  • 如何在没有 SSH 和 CLI 访问生产的情况下部署 symfony 项目 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 大多数托管提供商仅具有 FTP 访问权限 是否可以 常见地进行 symfony 项目 3 x 或 4 x 的本地安装 然后通过 FTP 上
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认

随机推荐

  • DasViewer加载大疆智图、CC等三维模型无空间坐标的解决方法

    对于大疆智图处理生成的terra osgbs文件夹下的三维模型包含了带有空间参数的metadata xml文件 利用DasViewer打开Model osgb模型文件 显示比较模糊 不能够达到实际应用的目的 我是利用转格式工具进行格式转换生
  • python 执行js脚本报错CryptoJS is not defined

    直接在js代码加上一行定义CryptoJS就行了 function encrypt e const CryptoJS require crypto js var b bGVhcm5zcGFjZWFlczEyMw var a new Base
  • 【Spring实战】—— 7 复杂集合类型的注入

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 之前讲解了Spring的基本类型和bean引用的注入 接下来学习一下复杂集合类型的注入 例如 List Set Map等 对于程序员来说 掌握多种语言是基本的技能 我们这里
  • 在本地以Docker方式安装和运行Kafka

    文章目录 在本地以Docker方式安装和运行Kafka 前言 用Bitnami kafka的镜像 用wurstmeister kafka的镜像 启动Kafka 测试创建主题并读 写消息 参考文档 后记 在本地以Docker方式安装和运行Ka
  • discuz7.2漏洞分析

    一 参数的入口 这段话的意思时遍历三种提交的方法 获取参数传递的值 有一个函数是daddslashes 跟进看一下 这段代码的意思是对数据里的每一个字符都进行转义处理 二 漏洞产生的代码在faq php195行 跟进implodeid函数
  • Tomcat安装测试、Eclipse配置Tomcat步骤

    一 安装tomcat并测试 1 1 1到Apache Tomcat官网下载安装包 在选择中间位置的版本较为稳定然后选择对应操作系统的安装包 本次选择8 5版本 1 1 2 解压下载好的安装包即可完成安装 复制Tomcat的安装路径以备下一步
  • 第十七章 C# Action和Func委托 多播 匿名函数 lambda表达式

    一 使用 Action和Func委托 方法的返回类型 和 名字千千万万 无法对每个方法都去定义对应的委托 nt为了方便使用委托 定义了两个泛型委托 Action Action委托表示一个void返回类型的方法 例1 MyDelegate m
  • 数据库内核杂谈阅读笔记

    数据库内核杂谈 InfoQ 文章目录 简单数据库实现 存储 索引优化 执行模式 Parsing Binding Optimizing Executing 排序和聚合 排序 聚合 JOIN 优化器 Query Rewrite Heuristi
  • 监控利器Nagios之一:监控本地NFS和外部HTTP、MySQL服务

    监控利器Nagios之一 监控本地NFS和外部HTTP MySQL服务 Nagios是一款开源的免费网络监视工具 能有效监控Windows Linux和Unix的主机状态 交换机路由器等网络设置 打印机等 在系统或服务状态异常时发出邮件或短
  • 深入学习jquery源码之attr()与removeAttr()

    深入学习jquery源码之attr 与removeAttr attr name properties key value fn 概述 设置或返回被选元素的属性值 参数 name String 属性名称 properties Map 作为属性
  • xml格式标签转为txt格式标签

    xml格式标签转为txt格式标签用于yolo目标检测 xml gt txt coding utf 8 import xml etree ElementTree as ET import pickle import os from os im
  • python实战:read,write读写,json文件读写

    1 read write 读写文本文件 基本操作 一 件的种类 1 本 件 可以使 本编辑软件查看 例如 python 的源程序 txt 文本文件等 2 二进制 件 保存的内容不是给 直接阅读的 是提供给其他软件使 的 例如 图 件 频 件
  • 前端学习——02——js预编译过程详解易懂附代码

    目录 一 预编译前奏 二 函数体系内的预编译 三 全局的预编译 四 例题 赋值一定是自右向左的 所以是先把123赋给b 再把b赋给a b是未经声明的 所以全局能访问到b a是局部变量所以访问不到 二 函数体系内的预编译 函数执行的前一刻生成
  • 网络虚拟化技术与NFV

    一 虚拟化技术概述 1 虚拟化技术简介 虚拟化 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 在一台计算机上同时运行多个逻辑计算机 每个逻辑计算机可运行不同的操作系统 并且应用程序都可以在相互独立的空间内运行而互不影响 从而显著提高计
  • gcd模板

    include
  • 如何把数据集划分成训练集和测试集

    本文主要内容来自周志华 机器学习 本文中代码 问题 对于一个只包含 m 个样例的数据集 D x 1 y 1 x 2 y 2 cdots x m y m 如何适当处理 从 D 中产生训练集 S 和测试集 T 下面介绍三种常见的做法 留出法 交
  • 中兴网络设备交换机路由器检查调试信息是否关闭命令方法

    描述 中兴网络设备交换机路由器检查调试信息是否关闭命令方法 命令 show debug
  • 图像处理和计算机视觉中的经典论文

    感谢水木上同领域的同学分享 有了他的整理 让我很方便的获得了CV方面相关的经典论文 我也顺便整理一下 把pdf中的文字贴到网页上 方便其它人更直观的获取所要内容 资料的下载链接为 http iask sina com cn u 225229
  • Java SE和 Java EE有什么区别

    Java SE是 Java 语言的标准版本 用于开发桌面应用程序 小型嵌入式系统和服务器端应用程序 Java EE是 Java 语言专为企业应用程序而设计的版本 提供了更多的功能和服务 如 Web 技术 安全性和事务管理
  • ThinkPHP表单验证规则归纳总结

    格式验证类 require isRequire 不得为空 number isNumber 验证字段是否为纯数字 integer isInteger 验证字段是否为整数 float isFloat 验证字段是否为浮点数 boolean isB