<?php
/**
* 参数验证类
* libraries_include("","Validator.class.php");
* @author lizhiqiang
*/
class Validator
{
/**
* 检查数据
* @param string $value 需要验证的数值
* @param string $ruleItem 验证规则
* 例子: libraries_include("","Validator.class.php");
* Validator::check_param(100,"intval");
* Validator::check_param(100,array("intval",array("length"=>array(0,6))));
*/
static function check_param($value="",$ruleItem)
{
$ruleResult = array();
//如果没有设置规则 则返回true
if($ruleItem == null || $ruleItem == "")
{
return true;
}
//如果是单条规则
if(!is_array($ruleItem))
{
$ruleItem = trim($ruleItem);
if(method_exists(Validator,$ruleItem))
{
return self::$ruleItem($value);
}
return true;
}
//如果是多条规则 则逐一进行验证
foreach($ruleItem as $ruleKey => $ruleValue)
{
$ruleKey = trim($ruleKey);
//判断检查规则中是否含有参数
if(!is_array($ruleValue))
{
if(method_exists(Validator,$ruleKey))
{
$ruleResult[] = self::$ruleKey($value);
}else{
$ruleResult[] = true;
}
}else{
if(method_exists(Validator,$ruleKey))
{
$ruleResult[] = self::$ruleKey($value,$ruleValue);
}else{
$ruleResult[] = true;
}
}
}
//检测多条规则的正确性
if(in_array(false,$ruleResult))
{
return false;
}else{
return true;
}
}
/**
* 检测参数是否为数组
* @param $value
* @return bool
*/
static public function is_array($value)
{
$result = false;
if(!self::required($value)) return false;
if(is_array($value))
{
$result = true;
}
return $result;
}
/**
* 检测参数是否存在于数组中
* @param $value 参数值
* @param $data 数组
* @return bool
*/
static public function in_array($value,$data)
{
$result = false;
if(!self::required($value)) return false;
if(in_array($value,$data))
{
$result = true;
}
return $result;
}
/**
* 检测参数是否为空
* @param string $value 参数
* @return bool
*/
static public function required($value)
{
if (!is_array($value))
{
return (trim($value) == '') ? FALSE : TRUE;
}
else {
return ( ! empty($value));
}
}
/**
* 字符串验证
* @param $value 参数值
*/
static function string($value)
{
$result = false;
if(!self::required($value)) return false;
if(is_string($value))
{
$result = true;
}
return $result;
}
/**
* 整数验证
* @param $value 参数值
*/
static function intval($value)
{
$result = false;
if(self::number($value,"intval"))
{
$result = true;
}
return $result;
}
/**
* 浮点型验证
* @param $value 参数值
*/
static function float($value)
{
$result = false;
if(self::number($value,"float"))
{
$result = true;
}
return $result;
}
/**
* 数字验证
* @param $value 参数值
* @param $flag intval 整数 float 浮点数 numeric 数字
*/
static function number($value,$flag)
{
$result = false;
if(!self::required($value)) return false;
if(!in_array($flag,array("intval","float","numeric")))
{
return false;
}
switch($flag)
{
case "intval":
$result = (string)(int)$value == (string)$value ? true : false;
$ss=1;
break;
case "float":
$result = is_float($value);
break;
case "numeric":
$result = is_numeric($value);
break;
}
return $result;
}
/**
* 长度验证
* @param $value 参数值
* @param array $range 取值范围
*/
static function length($value,$range=array())
{
$result = false;
if(!self::required($value)) return false;
$length = mb_strlen($value);
list($min,$max) = $range;
if($length>=$min and $length<=$max)
{
$result = true;
}
return $result;
}
/**
* 手机号验证
* @param $value 参数值
* @return bool
*/
static function phone($value)
{
$result = false;
if(!self::required($value)) return false;
$exp = "/(^1[3|4|5|7|8][0-9]{9}$)/";
if(preg_match($exp,$value))
{
$result = true;
}
return $result;
}
/**
* 邮箱验证
* @param $value 参数值
* @return bool
*/
static function email($value)
{
$result = false;
if(!self::required($value)) return false;
$exp = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
if(preg_match($exp,$value))
{
$result = true;
}
return $result;
}
/**
* 验证中文
* @param $value 参数值
*/
static function chinese($value,$charset)
{
$result = false;
if(strtolower($charset) == 'gb2312')
{
$exp = "/^[".chr(0xa1)."-".chr(0xff)."]+$/";
}else{
$exp = "/^[x{4e00}-x{9fa5}]+$/u";
}
if(preg_match($exp,$value))
{
$result = true;
}
return $result;
}
}