博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【php】用filter_var实现的简单参数验证
阅读量:6202 次
发布时间:2019-06-21

本文共 2633 字,大约阅读时间需要 8 分钟。

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

先看看代码:

 

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函数,专门配置验证规则。

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

你可能感兴趣的文章
开源的报表系统easyreport的部署
查看>>
easyui combobox 的取值问题
查看>>
解决python:'ascii' codec can't encode characters in position问题
查看>>
NIO SelectionKey attachment()空指针错误
查看>>
不重复大数据量的批量生成
查看>>
sgu101-欧拉回路
查看>>
iOS_21团购_地图功能
查看>>
DOS批处理高级教程
查看>>
MySQL中OPTIMIZE TABLE的作用
查看>>
LeetCode211:Add and Search Word - Data structure design
查看>>
Python 的 LEGB 规则(转载)
查看>>
Ubuntu下deb包的安装方法 - kevinhg的博客 - 博客频道 - CSDN.NET
查看>>
【cocos2d-x 3.7 飞机大战】 决战南海I (八) 背景移动
查看>>
CNN 文本分类
查看>>
我们的大脑是单线程结构还是多线程结构?
查看>>
在shell脚本中使用函数的返回值
查看>>
Redis 命令二
查看>>
numpy中dtype
查看>>
Scala之String
查看>>
赤峰项目Nginx进程异常的处理办法
查看>>