文件
mashangyoujiu/Application/Common/Validate/CustomValidate.class.php

234 行
11 KiB
PHP
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

<?php
namespace Common\Validate;
//[1.8.50]
/**
* 自定义验证规则
* Class CustomValidate
* @package Common\Validate
*/
class CustomValidate
{
protected $param_name = array();//参数含义
public function __construct($param_name = array())
{
$this->param_name = $param_name;
}
/**
* 验证对象数组的值
* @param array $param 需要验证的参数数组
* @param array $validate 验证规则
* @return array
*/
public function validate($param = array(), $validate = array())
{
foreach ($validate as $key => $val) {
/*判断变量是否必传,默认为必传*/
if (!isset($val['required']) || $val['required']) {
if (empty($param[$key]) && $param[$key] != '0') {
return $this->returnParamError($key, '缺少参数');
}
}
if (isset($param[$key]) && $param[$key] !== null) {
if (!empty($val['reg'])) {
/*变量需要正则验证*/
if (!preg_match($val['reg'], $param[$key])) {
return $this->returnParamError($key, '参数值有误');
}
} else if (!empty($val['type'])) {
if ($val['type'] == 'mobile') {
if (!verifyMobilePhone($param[$key])) {
return $this->returnParamError($key, '手机号有误');
}
} else if ($val['type'] == 'name') {
if (!verifyName($param[$key])) {
return $this->returnParamError($key, '姓名格式有误');
}
} else if ($val['type'] == 'money') {
if (isset($val['min'])) {
if (!verifyNumber($param[$key], 2, $val['min'])) {
return $this->returnParamError($key, '小于最小值');
}
} else {
if (!verifyPrice($param[$key])) {
return $this->returnParamError($key, '价格不正确');
}
}
} else if ($val['type'] == 'number') {
if (!verifyNumber($param[$key], isset($val['step']) ? $val['step'] : 0, isset($val['min']) ? $val['min'] : 0)) {
return $this->returnParamError($key, '值有误');
}
} else if ($val['type'] == 'json_array') {
$param[$key] = htmlspecialchars_decode($param[$key]);
$temp = json_decode($param[$key], true);
if (empty($temp)) {
return $this->returnParamError($key, '缺少参数');
} else if (!is_array($temp)) {
return $this->returnParamError($key, '数据类型不正确');
}
} else {
if (gettype($param[$key]) != $val['type']) {
/*变量有类型限制('boolean','integer','double','string','array','object','resource','NULL','unknown type')*/
return $this->returnParamError($key, '数据类型不正确');
}
}
}
if (isset($val['min'])) {
/*取值范围*/
if ($param[$key] < $val['min']) {
return $this->returnParamError($key, '小于最小值');
}
}
if (isset($val['max'])) {
/*取值范围*/
if ($param[$key] > $val['max']) {
return $this->returnParamError($key, '大于最大值');
}
}
if (!empty($val['in']) && is_array($val['in'])) {
if (!empty($val['type']) && $val['type'] == 'array') {
//取交集
if (!is_array($param[$key]) || count($param[$key]) != count(array_intersect($param[$key], $val['in']))) {
return $this->returnParamError($key, '不在可取值之内1');
}
} else {
if (!in_array($param[$key], $val['in'])) {
return $this->returnParamError($key, '不在可取值之内2');
}
}
}
if (!empty($val['maxLen'])) {
if (strlen($param[$key]) > $val['maxLen'] * 3) {
return $this->returnParamError($key, '超过最大长度');
}
}
if (!empty($val['require_link'])) {
foreach ($val['require_link'] as $v1) {
if (in_array(gettype($v1['require_data']), array('boolean', 'integer', 'double'))) {
if ($param[$key] == $v1['require_data']) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
} else if (gettype($v1['require_data']) == 'array') {
switch ($v1['require_data'][0]) {
case 'lt':
if ($param[$key] < $v1['require_data'][1]) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
case 'elt':
if ($param[$key] <= $v1['require_data'][1]) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
case 'gt':
if ($param[$key] > $v1['require_data'][1]) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
case 'egt':
if ($param[$key] >= $v1['require_data'][1]) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
case 'eq':
if ($param[$key] == $v1['require_data'][1]) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
case 'neq':
if ($param[$key] != $v1['require_data'][1]) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
case 'in':
if (in_array($param[$key], $v1['require_data'][1])) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
case 'not in':
if (!in_array($param[$key], $v1['require_data'][1])) {
foreach ($v1['link_key'] as $v2) {
if (empty($param[$v2])) {
return $this->returnParamError($v2, '不能为空');
}
}
}
break;
}
}
}
}
}
}
return array('error' => 0, 'message' => '验证成功');
}
/**
* @param $key 键名
* @param string $message 错误描述
* @return array
*/
protected function returnParamError($key, $message = '参数值有误')
{
if ($this->param_name[$key]) {
return array('error' => 1, 'key' => $key, 'message' => $message . ':' . $this->param_name[$key]);
} else {
return array('error' => 1, 'key' => $key, 'message' => $message);
}
}
/**
* 验证参数是否正确
* @param $param : 后台要的
* @param $post : 前台传递
* @return mixed
*/
public function validationParameters($param,$post){
foreach ($param as $value){
$isData = array_key_exists($value,$post);
if($isData === false){
$message = "缺少参数 '".$value."'";
$res = callBack(statusCode()['error'],$message);
return $res;
}
}
return true;
}
}