zoukankan      html  css  js  c++  java
  • 【php】用filter_var实现的简单参数验证

    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, 没传参数-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 "验证通过,继续其它代码...
    ";
        }catch(Exception $e){
            echo 'Caught exception: ',  $e->getMessage(), "
    ";
        }
    ?>
    

      

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

    使用方法:

    1. 建议把filter_param放到公共函数库中。
    2. 建议在每个model里都有个checkParam函数,专门配置验证规则。
    Reboot 运维开发 我们的目标是将所有的运维问题自动化 官网:http://51reboot.com/ 交流QQ群: 365534424
  • 相关阅读:
    dotnet 新项目格式与对应框架预定义的宏
    dotnet 线程静态字段
    dotnet 线程静态字段
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 拿到显卡信息
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取指定进程的输入命令行
    dotnet 通过 WMI 获取系统信息
    dotnet 通过 WMI 获取系统信息
    PHP show_source() 函数
  • 原文地址:https://www.cnblogs.com/51reboot/p/4005533.html
Copyright © 2011-2022 走看看