filter_var是在php5.2.0中开始提供的。详细说明见:

http://www.php.net/manual/zh/book.filter.php

先看看代码:

<?php
class Utils {/*** 主要是调用filter_var_array验证,再扩充一个required字段来表示必填项。* http://www.php.net/manual/zh/book.filter.php* 注意: (可以不传,但不能传错)*  1.先验证格式,有失败的抛异常。*  2.未传的参数,有default的(不管是否required=1),则设置为default值。* 示例:*      $filterArr = array(*          "pn" =>array(*              "required"  => 1,*              "filter"    => FILTER_VALIDATE_INT,*              "options"   => array(*                  "default"   =>1,*                  "min_range" =>1,*              )*          )*      )*/
public static function filter_param($paramArr, $filterArr){$res = filter_var_array($paramArr, $filterArr);     //参数不合法-flase, 没传参数-nullforeach($res as $key=>$val){//如果有验证失败的,抛出异常。if(false === $val){throw new Exception( "Utils::filter_param: failed, key=$key ");}//再判断未传的参数。if( is_null($val)){//1.如果是必填项if($filterArr[$key]['required'] ){if(isset($filterArr[$key]['options']['default'])){//1.1如果有default值,则设置为default值。$res[$key] = $filterArr[$key]['options']['default'];}else{//1.2如果没有default值,抛出异常。throw new Exception( "Utils::filter_param: Do not have required param, key=$key" );}}else{//$res[$key]='';      //这里是默认把null值改为空值。是否有必要?}}}return $res;
}
};//每个model里,都写个checkParam函数,用来配置验证的规则。function checkParam($arrInput){//1.先检查catId$filter = array(//数字类型的,必填。只允许 0-1。"catId" => array("required"=>1,"filter"=>FILTER_VALIDATE_INT,"options"=>array("min_range" =>0,"max_range" =>1,)),//字符串类型的,必填。长度大于1。"title" => array("required"=>1,"filter"=>FILTER_VALIDATE_REGEXP,"options"=>array("regexp" =>"/^.+/",)),//字符串类型的,非必填。但要是填了的话,则格式必须为email。"email" => array("filter"=>FILTER_VALIDATE_EMAIL,),);$_res = Utils::filter_param($arrInput, $filter) ;}//比如这个是输入的参数。可以试着修改这里看看效果。$arrInput=array('catId'=>1,'title'=>'xx','email'=>'xxxxxx.com',);try{$res=checkParam($arrInput);echo "验证通过,继续其它代码...\n";}catch(Exception $e){echo 'Caught exception: ',  $e->getMessage(), "\n";}
?>

  

上面的代码,可直接运行。

使用方法:

  1. 建议把filter_param放到公共函数库中。
  2. 建议在每个model里都有个checkParam函数,专门配置验证规则。

转载于:https://www.cnblogs.com/51reboot/p/4005533.html

【php】用filter_var实现的简单参数验证相关推荐

  1. 【ADO.NET】2、各种版本的 简单登录验证

    一.简单登录验证(防SQL注入) GetString(序号) 返回某一列的值(当用户不记得列名序号时,可使用GetOrdinal()获取到序号) GetInt32(序号) 针对的是 int 字段,返回 ...

  2. jsr 303_使用Spring和JSR 303进行方法参数验证

    jsr 303 Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 设定 首先,我们需要通过创建MethodValidation ...

  3. 使用优雅方式对参数验证进行处理

    我们在一般的接口函数开发中,为了安全性,我们都需要对传入的参数进行验证,确保参数按照我们所希望的范围输入,如果在范围之外,如空值,不符合的类型等等,都应该给出异常或错误提示信息.这个参数的验证处理有多 ...

  4. bean validation校验方法参数_SpringBoot参数校验 从入门到精通 解决繁琐的参数验证工作...

    ● 手把手教你实现 SpringBoot与Vue整合开发 前后端分离 简单例子 详解●SQL优化经历  SQL执行效率提高了1000w倍●Java面试题 详解 由易到难● SQL语句大全详解 增删改查 ...

  5. java后台验证不能为空_java validation 后台参数验证的使用详解

    一.前言 在后台开发过程中,对参数的校验成为开发环境不可缺少的一个环节.比如参数不能为null,email那么必须符合email的格式,如果手动进行if判断或者写正则表达式判断无意开发效率太慢,在时间 ...

  6. dotNET Core WebAPI 统一处理(返回值、参数验证、异常)

    现在 Web 开发比较流行前后端分离 现在 Web 开发比较流行前后端分离,我们的产品也是一样,前端使用Vue,后端使用 dotNet Core WebAPI ,在写 API 的过程中有很多地方需要统 ...

  7. jsr303 spring_使用Spring和JSR 303进行方法参数验证

    jsr303 spring Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 建立 首先,我们需要通过创建MethodVali ...

  8. 使用Spring和JSR 303进行方法参数验证

    Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法. 在这篇文章中,我们将看到如何使用此功能. 设定 首先,我们需要通过创建MethodValidationPostProc ...

  9. React.js 小书 Lesson24 - PropTypes 和组件参数验证

    作者:胡子大哈 原文链接: http://huziketang.com/books/react/lesson24 转载请注明出处,保留原文链接和作者信息. 我们来了到了一个非常尴尬的章节,很多初学的朋 ...

最新文章

  1. Linuxday01基础命令
  2. oracle备份磁盘头,oracle asm 磁盘头数据以及备份与恢复基础篇(2)
  3. [转载]用消息队列和消息应用状态表来消除分布式事务
  4. 当Kubernetes应用遇到阿里分批发布模式
  5. JavaScript 运行机制详解(理解同步、异步和事件循环)
  6. thinkphp5 php代码中如何确定文件的路径位置
  7. eclipse搭建javaweb开发环境
  8. 围观Razavi和Sansen打架——电流并联反馈
  9. 能查阅国外文献的8个论文网站(最新整理)
  10. python任务栏都隐藏了_请问如何始终隐藏WINDOWS任务栏?
  11. MySQL定时任务,清理表数据
  12. TOAD 调试存储过程的方法
  13. LeetCode 934.最短的桥
  14. 最全最丰富的随机图片调用接口——三千之图
  15. cad注释比例和打印比例不一样_cad注释比例(cad注释比例与打印比例)
  16. 组件类--发送验证码倒计时
  17. 171023 逆向-BDCTF(Re)
  18. 让后台Stopped的进程继续运行
  19. android探索宇宙app,AR研学星系探索app
  20. 新冠疫情可视化(7月9日,7月10日)

热门文章

  1. Windows系统安全模式妙用全接触
  2. NumPy - np.random.multivariate_normal()
  3. 14/100. Merge Two Sorted Lists
  4. WIN8 启用虚拟AP 以共享网络,使手机电脑一起网上冲浪
  5. 【转载】MySQL索引背后的数据结构及算法原理
  6. Luogu3732 [HAOI2017] 供给侧改革 【后缀数组】【线段树】【乱搞】
  7. 每日站立会议(第六天)
  8. 软件工程概论———登录界面的设计
  9. 记录idea maven项目打包部署web项目mapper扫描失败
  10. TurboLinux11system»adjtimex简介