234 行
11 KiB
PHP
可执行文件
234 行
11 KiB
PHP
可执行文件
<?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;
|
||
}
|
||
} |