为了账号安全,请及时绑定邮箱和手机立即绑定

表单验证类(未精简)

<?php
/****************
*    verify.class.php
*    表单验证类
*****************/
class Verify{
    private $params;

    public function __construct($input=array()){
        $this->init($input);
    }
    
    /*
    *    @function 初始化参数
    *    @param array $input表单域名数组 示例array("userName","pwd")
    *    @return 
    */
    public function init($input=array()){
        $this->params=$input;
    }
    
    /**
    *    @function 检测所有提交数据是否通过验证
    *    @param array $input 二维数组 示例: array(array("name"=> ,"value"=>,"type"=>,"format"=>,"allow_arr"=>,"maxLength"=>,"mixLength"=>,"isEmpty"=>),)
    *    @return boolean true|false
    */
    public function checkAll($input){
        if(is_array($input)){
            $flag=true;
            foreach($input as $key=>$value){
                if(!isset($this->params[$value["name"]])){
                    continue;
                }
                $value["allow_arr"]=(isset($value["allow_arr"]) && is_array($value["allow_arr"])) ? $value["allow_arr"] : array();
                $value["maxLength"]=isset($value["maxLength"]) ? $value["maxLength"] : 0; 
                $value["mixLength"]=isset($value["mixLength"]) ? $value["mixLength"] : 0;
                $value["isEmpty"]=isset($value["isEmpty"]) ? $value["isEmpty"] : 0;
                $result=$this->inputCheck($value["name"],$value["value"],$value["type"],$value["format"],$value["allow_arr"],$value["maxLength"],$value["mixLength"],$value["isEmpty"]);
                if($result===false){
                    $flag=false;
                    echo "表单域名称为".$value["name"]."的值".$value["value"]."未通过验证";
                    break;
                }
            }
            return $flag;
        }
    }


    /*
    *    @function 输入参数验证是否通过
    *    @params string $name 表单名
    *            mixed $value 表单名对应的值
    *            string $type 变量类型 必须是基础数据类型int,bool,double,string。    
    *            string $format 数据格式类型 email,pwd等
    *            array $allow_arr 允许范围
    *            int $maxLength 最大长度
    *            int $mixLength 最小长度
    *            int $isEmpty 是否允许为空
    *    @return boolean true|false
    */
    public function inputCheck($name,$value,$type,$format,$allow_arr=array(),$maxLength=0,$mixLength=0,$isEmpty=0){
        //检查变量是否存在
        if(!isset($this->params[$name])){
            return false;
        }
        //第二步 判断变量是否有值
        if(empty($value)){
            if($isEmpty==0){
                return false;
            }
            else{
                return true;
            }
        }
        //第三步 判断变量类型是否
        if($this->getParameterType($value)!==$type){
            return false;
        }
        //第四步 如果是字符串判断其是否在指定长度内
        if(is_string($value) && (strlen(trim($value))<$mixLength || strlen(trim($value))>$maxLength)){
            return false;
        }
        //第四步 如果是选择项即allow_arr数组不为空,是否在数组范围内
        if(!empty($allow_arr) && !in_array($value,$allow_arr)){
            return false;
        }
        //第五步 进入正则表达式验证
        return $this->matchValue($value,$format);
    }

    /*
    *    @function 获得参数的数据类型
    *    @params mixed $value参数
    *    @return string $var_type数据类型
    */
    public function getParameterType($value){
        $var_type="";
        if(is_int($value)){
            $var_type="int";
        }
        else if(is_bool($value)){
            $var_type="bool";
        }
        else if(is_double($value)){
            $var_type="double";
        }
        else if(is_string($value)){
            $var_type="string";
        }
        else{
            $var_type="unkown";
        }
        return $var_type;
    }

    /*
    *    @function 使用正则表达式检验值
    *    @params mixed $value参数,string $format数据格式类型
    *    @return boolean true|false
    */
    public function matchValue($value,$format){
        switch($format){
            case "integer"://整数
                return is_int($value);
                break;
            case "account"://账号
                //由字母a~z(不区分大小写)、数字0~9、下划线组成只能以字母开头和(数字或字母)结尾 用户名长度为8~18个字符
                return preg_match("/^[a-za-z]{1}[a-za-z0-9|_]{6-16}[a-za-z0-9]{1}$/",$value);
                break;
            case "password"://密码
                //由字母a~z(不区分大小写)、数字0~9、下划线组成只能以字母开头和(数字或字母)结尾 用户名长度为6~14个字符
                return preg_match("/^[a-zA-Z]{1}[a-za-z0-9|_]{4-12}[a-za-z0-9]{1}$/",$value);
            default:
                break;
        }
    }
}
//测试代码
$cols=array("account");
$verify=new Verify($cols);
$inputCheck=array();
$inputCheck[]=array("name"=>"account","value"=>$account,"type"=>"string","format"=>"account","maxLength"=>18,"mixLength"=>8);
$rs=$verify->checkAll($inputCheck);
?>

本人菜鸟一个,写了一个简单的表单验证类,各位大大及老师帮我看看,还有哪些不足或遗漏的地方,希望指出,谢谢!

正在回答

1 回答

自己纠正一下一个逻辑错误,第四步 如果是字符串判断其是否在指定长度内时

修改前

if(is_string($value) && (strlen(trim($value))<$mixLength || strlen(trim($value))>$maxLength)){ 
           return false;
}

修改后

if(is_string($value)){
    if(strlen(trim($value))<$mixLength || strlen(trim($value))>$maxLength){
        return false;
    }
}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181823    人
  • 解答问题       2577    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程

表单验证类(未精简)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信