PHP - 验证数据格式类及各种验证函数,总有你想要的

简单粗暴 ⛽️

希望各位大神批评指出

使用方法

  1. 创建验证文件夹 [ validate ]
  2. 在 validate 文件夹内创建验证文件 ad.validate.php (格式: 请求文件名.validate.php)
    // ad.validate.php
    /**
    * Author: 老掌
    * Date: 2020/05/11 16:10
    */
    return $validate = [
       'code' => [
           ‘url'=>1001,
           'name'=>1002
       ],
       'rule' => [
           'url' => 'url',
           'name'=>'must'
       ],
       'message' => [
           'url' => '请上传广告文件',
           'name' => '请输入广告名称',
       ],
       'scene' => [
           'ad_add' => ['url','name'],
       ],
    ]
    
  3. 调用验证类
    $this->scriptfilename = pathinfo($_SERVER['SCRIPT_FILENAME'])['filename'];
    Validate::validateData($this->_G,$this->scriptfilename,'ad_add');
    

验证类

/**
 * @Description 数据格式验证类
 * @author WangWeiChen
 * @date 2019-09-26  18:57
 */

class Validate
{
    
    

	/**
	 * 数据验证方法
	 * @param  [array] 	$data         [验证数据]
	 * @param  [string] $validateFile [引入的验证规则文件名]
	 * @param  [string] $scene        [验证场景]
	 * @param  [string] $is_tip    	  [是否直接进行提示 1:直接提示 0:返回状态]
	 * @param  [string] $is_ajax      [是否为 ajax 请求 1:是 0:否]
	 * @return [
	 *  格式正确: return array('code'=>1,'msg'=>'')
	 *  格式错误:
	 *  	$is_tip=1 and $is_ajax=1 >> return exit(json_encode(array('code'=>状态码,'msg'=>提示语)));
	 *  	$is_tip=1 and $is_ajax=0 >> error($returnInfo['msg']);
	 *  	$is_tip=0                >> return $returnInfo;
	 * ]
	 */
	Static function validateData($data,$validateFile,$scene,$is_tip = 1,$is_ajax=1){
    
    
		require "./validate/" . $validateFile . ".validate.php"; //引入模块的验证规则,返回变量 $validate
		$returnInfo['code'] = 1;
		$returnInfo['msg'] = '';
		if(empty($validate)){
    
    
			$returnInfo['code'] = 1001;
			$returnInfo['msg'] = '请完善验证规则';
		};
		if(empty($validate['scene'][$scene])){
    
    
			$returnInfo['code'] = 1001;
			$returnInfo['msg'] = '请完善验证规则';
		};

		//根据验证场景,拿到字段的验证规则进行格式验证,如不规范,则获取提示信息进行返回
		foreach($validate['scene'][$scene] as $key=>$val){
    
     //验证场景
			$rule = explode('|',$validate['rule'][$val]); //字段的验证规则
			if(empty($rule)) continue;

			foreach($rule as $ruleKey=>$ruleVal){
    
    
				if(empty($ruleVal)) continue;

				if(strpos($ruleVal,':')){
    
     //区间验证
					list($first, $singleRule) = explode(':',$ruleVal);

					if(!SELF::$first($data[$val],$singleRule)){
    
    
						if(isset($validate['message'][$val . "." . $first])){
    
    
							$returnMsg = $validate['message'][$val . "." . $first];
						}else{
    
    
							$returnMsg = isset($validate['message'][$val]) ? $validate['message'][$val] : '错误';
						}
						$returnInfo['code'] = $validate['code'][$val] ? $validate['code'][$val] : 1001;
						$returnInfo['msg'] = $returnMsg;
						$returnInfo['tag'] = $val;
						if($is_tip && $is_ajax){
    
    
							exit(json_encode($returnInfo));
						}elseif($is_tip && !$is_ajax){
    
    
							error($returnInfo['msg']);
						}else{
    
    
							return $returnInfo;
						}
					}
				}else{
    
     //直接验证
					if(!SELF::$ruleVal($data[$val])){
    
    
						if(isset($validate['message'][$val . "." . $ruleVal])){
    
    
							$returnMsg = $validate['message'][$val . "." . $ruleVal];
						}else{
    
    
							$returnMsg = isset($validate['message'][$val]) ? $validate['message'][$val] : '错误';
						}
						$returnInfo['code'] = $validate['code'][$val] ? $validate['code'][$val] : 1001;
						$returnInfo['msg'] = $returnMsg;
                        $returnInfo['tag'] = $val;
						if($is_tip && $is_ajax){
    
    
							exit(json_encode($returnInfo));
						}elseif($is_tip && !$is_ajax){
    
    
							error($returnInfo['msg']);
							exit;
						}else{
    
    
							return $returnInfo;
						}
					}
				}
			}
		}
		return $returnInfo;
	}


/*************** 字符汉字验证 ***************

    /**
	 * length 验证数据长度
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function length($value, $rule){
    
    
        
        $length = mb_strlen((string) $value);

        if (strpos($rule, ',')) {
    
    
            list($min, $max) = explode(',', $rule);
            return $length >= $min && $length <= $max;
        }

        return $length == $rule;
    }

    /**
     * contentIsNull 判断是否为 空
     * @param  [string] $value 	[值]
     * @return [bool]   		[TRUE OR FALSE]
     */
    Static function contentIsNull($value){
    
    
        return !empty(trim($value));
    }

    /**
	 * chs 判断是否为 纯汉字
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function chs($value){
    
    
   		return preg_match("/^[\x{4e00}-\x{9fa5}]+$/u",$value);
    }

    /**
	 * chsAlpha 判断是否为 汉字与字母组合
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function chsAlpha($value){
    
    
   		return preg_match("/^[\x{4e00}-\x{9fa5}a-zA-Z]+$/u",$value);
    }

    /**
	 * chsAlphaNum 判断是否为 汉字与字母与数字组合
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function chsAlphaNum($value){
    
    
   		return preg_match("/^[\x{4e00}-\x{9fa5}a-zA-Z0-9]+$/u",$value);
    }

	/**
	 * alphaNum 判断是否为 字母与数字组合
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function alphaNum($value){
    
    
   		return ctype_alnum($value);
    }

    /**
	 * alphaDash 判断是否为 字母和数字,下划线_及破折号-组合
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function alphaDash($value){
    
    
   		return preg_match("/^[A-Za-z0-9\-\_]+$/",$value);
    }

    /**
	 * alphaCoa 判断是否为 字母、数字、逗号组合
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function alphaCoa($value){
    
    
   		return preg_match("/^[A-Za-z0-9\,]+$/",$value);
    }
    /**
	 * alphaCoaColon 判断是否为 字母、数字、逗号、冒号组合
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function alphaCoaColon($value){
    
    
   		return preg_match("/^[A-Za-z0-9\,\:]+$/",$value);
    }

    /**
	 * alphaCoa 判断是否为 汉字、字母、数字、符号组合
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function chsAlphaNumDash($value){
    
    
   		return preg_match("/^[\x{4e00}-\x{9fa5}a-zA-Z0-9\-\_\(\)\(\)\,]+$/u",$value);
    }
    /**
     * 成员管理 判断字母,汉字,数字,符号
    */
    Static function chsAlphaNumDashEmail($value)
    {
    
    
        return preg_match("/[\x{4e00}-\x{9fa5}a-zA-Z0-9\-\_\(\)\(\)\,\@\.]+$/u",$value);
    }
    /**
     * 操作日志 判断字母,数字,符号
     */
    Static function alphaNumDashEmail($value)
    {
    
    
        return preg_match("/[a-zA-Z0-9\-\_\(\)\(\)\,\@\.]+$/u",$value);
    }
    /**
     * alphaDash 判断是否为 数字,下划线_及破折号-组合
     * @param  [string] $value 	[值]
     * @return [bool]   		[TRUE OR FALSE]
     */
    Static function numberDash($value){
    
    
        return preg_match("/^[0-9\-\_]+$/",$value);
    }

    /**
	 * numberDash 判断是否为 数字冒号组合
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function numberColon($value){
    
    
        return preg_match("/^[0-9\:]+$/",$value);
    }

/*************** 数字验证 ***************
    /**
	 * max 验证数据最大长度
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function max($value, $rule)
    {
    
    
        
        $length = mb_strlen((string) $value);

        return $length <= $rule;
    }

    /**
	 * min 验证数据最小长度
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function min($value, $rule)
    {
    
    
        
        $length = mb_strlen((string) $value);

        return $length >= $rule;
    }

    /**
	 * egt 验证是否大于等于某个值
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function egt($value, $rule)
    {
    
    
        return $value >= $rule;
    }

   	/**
	 * gt 验证是否大于某个值
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function gt($value, $rule)
    {
    
    
        return $value > $rule;
    }

    /**
	 * elt 验证是否小于等于某个值
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function elt($value, $rule)
    {
    
    
        return $value <= $rule;
    }

    /**
	 * lt 验证是否小于某个值
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function lt($value, $rule)
    {
    
    
        return $value < $rule;
    }

    /**
	 * eq 验证是否等于某个值
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function eq($value, $rule)
    {
    
    
        return $value == $rule;
    }

    /**
	 * decimals 判断小数位数
	 * @param  [string] $value 	[值]
	 * @param  [mixed] 	$rule 	[小数位数]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function decimals($value,$rule){
    
    
   		return preg_match('/^[0-9]+(.[0-9]{1,'.$rule.'})?$/',$value);
    }

    /**
	 * number 判断是否为数字 (负数与小数都为 false)
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function number($value){
    
    
   		return ctype_digit((string) $value);
    }

    /**
	 * integer 判断是否整形
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function integer($value){
    
    
   		return filter_var($value, FILTER_VALIDATE_INT);
    }

    /**
	 * float 判断是否为浮点数字
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function float($value){
    
    
   		return filter_var($value, FILTER_VALIDATE_FLOAT);
    }

    /**
	 * money 判断是否为金额 「正数」
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function money($value){
    
    
   		return preg_match('/^[0-9]+(.[0-9]{1,2})?$/',$value);
    }


    /**
	 * in 验证是否在范围内
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function in($value, $rule)
    {
    
    
        return in_array($value, is_array($rule) ? $rule : explode(',', $rule));
    }

    /**
	 * notIn 验证是否不在某个范围
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function notIn($value, $rule)
    {
    
    
        return !in_array($value, is_array($rule) ? $rule : explode(',', $rule));
    }

	/**
	 * between 验证数据范围
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function between($value,$rule){
    
    
   		if (is_string($rule)) {
    
    
            $rule = explode(',', $rule);
        }
        list($min, $max) = $rule;

        return $value >= $min && $value <= $max;
    }

    /**
	 * notBetween 验证数据不在某个范围
	 * @param  [string] $value 	[值]
	 * @param  [mixed]  $rule 	[规则]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function notBetween($value, $rule)
    {
    
    
        if (is_string($rule)) {
    
    
            $rule = explode(',', $rule);
        }
        list($min, $max) = $rule;

        return $value < $min || $value > $max;
    }

/*************** 其它验证 ***************

    /**
	 * phone 判断是否为手机号
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function phone($value){
    
    
   		return preg_match("/^1[3456789]{1}\d{9}$/",$value);
    }

    /**
	 * email 判断是否为邮箱
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function email($value){
    
    
   		return filter_var($value, FILTER_VALIDATE_EMAIL);
    }

    /**
	 * url 判断是否为 有效的URL地址
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function url($value){
    
    
   		return filter_var($value, FILTER_VALIDATE_URL);
    }

    /**
	 * activeUrl 验证是否为合格的域名或者IP,支持A,MX,NS,SOA,PTR,CNAME,AAAA,A6, SRV,NAPTR,TXT 或者 ANY类型
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function activeUrl($value, $rule = 'MX')
    {
    
    
        if (!in_array($rule, ['A', 'MX', 'NS', 'SOA', 'PTR', 'CNAME', 'AAAA', 'A6', 'SRV', 'NAPTR', 'TXT', 'ANY'])) {
    
    
            $rule = 'MX';
        }

        return checkdnsrr($value, $rule);
    }

    /**
	 * idcard 判断是否为身份证号
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function idcard($value){
    
    
   		return preg_match("/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/",$value);
    }

    /**
	 * must 是否必填
	 * @param  [string] $value 	[值]
	 * @return [bool]   		[TRUE OR FALSE]
	 */
    Static function must($value)
    {
    
    
        return !empty($value);
    }

}

猜你喜欢

转载自blog.csdn.net/qq_35453862/article/details/117220727