【php】用filter_var实现的简单参数验证

简介:

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


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


先看看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?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, 没传参数-null
         foreach ( $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函数,专门配置验证规则。



本文转自 xjtuhit 51CTO博客,原文链接:http://blog.51cto.com/51reboot/1427065


相关文章
|
小程序 前端开发 PHP
PHP实现生成小程序二维码带参数进入指定页面、小程序URL scheme实现携带数据跳转小程序
PHP实现生成小程序二维码带参数进入指定页面、小程序URL scheme实现携带数据跳转小程序
398 0
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
JavaScript 前端开发 安全
php学习笔记-普通表单参数提交获取及页面的重定向和一个登录小demo-day05
本文介绍了PHP中普通表单参数的提交获取、页面重定向的方法,并通过一个登录示例演示了表单参数的封装和页面跳转处理。
|
8月前
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
|
8月前
|
PHP 数据库
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
603 4
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
641 3
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
前端开发 JavaScript 机器人
用PHP实现了一个极验验证功能,如何做?具体代码如何写?
极验验证是一种防机器人的验证机制,可以通过图像识别等方式来判断用户是否为真实用户。
360 1
|
安全 Java 云计算
JSF 应用究竟何去何从?云端部署能否成为其全新突破点?快来一探究竟!
【8月更文挑战第31天】本文介绍了将JavaServer Faces(JSF)应用部署到云平台的过程。首先,根据成本、功能、可靠性和安全性选择合适的云平台。接着,展示了构建简单JSF应用的示例代码。最后,以AWS Elastic Beanstalk为例,详细说明了部署流程。部署至云端可提升应用的可用性、扩展性和安全性。
163 0