基于JSON类型返回的API接口如果做输出校验?
程序员文章站
2024-01-29 21:13:58
...
现在在开发一个api接口,返回数据是json格式的,前端输入有validator校验器可以校验数据是否合法,那后台输出的返回呢?只能用phpunit的单元测试方法测试字段是否完全返回吗?有没有什么比较简单的输出校验框架可以用
回复内容:
现在在开发一个api接口,返回数据是json格式的,前端输入有validator校验器可以校验数据是否合法,那后台输出的返回呢?只能用phpunit的单元测试方法测试字段是否完全返回吗?有没有什么比较简单的输出校验框架可以用
后台写一个验证类吧。
给你一个做参考
'/^([.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\\.[a-zA-Z0-9_-])+/',
"phone"=>'/^(([0-9]{2,3})|([0-9]{3}-))?((0[0-9]{2,3})|0[0-9]{2,3}-)?[1-9][0-9]{6,7}(-[0-9]{1,4})?$/',
"mobile"=>'/^1[0-9]{10}$/',
"url"=>'/^http:(\\/){2}[A-Za-z0-9]+.[A-Za-z0-9]+[\\/=?%-&_~`@\\[\\]\':+!]*([^\"\"])*$/',
"currency"=>'/^[0-9]+(\\.[0-9]+)?$/',
"number"=>'/^[0-9]+$/',
"zip"=>'/^[0-9][0-9]{5}$/',
"qq"=>'/^[1-9][0-9]{4,8}$/',
"integer"=>'/^[-+]?[0-9]+$/',
"integerpositive"=>'/^[+]?[0-9]+$/',
"double"=>'/^[-+]?[0-9]+(\\.[0-9]+)?$/',
"doublepositive"=>'/^[+]?[0-9]+(\\.[0-9]+)?$/',
"english"=>'/^[A-Za-z]+$/',
"chinese"=>'/^[\x80-\xff]+$/',
"username"=>'/^[\\w]{3,}$/',
"nochinese"=>'/^[A-Za-z0-9_-]+$/',
);
/**
* 验证数组中的值
*
*
* //使用示例
* setValidate("344d",true,"","不可以为空");
* $a->setValidate("fdsfsfd",true,"Email","请填写正确的EMAIL");
* echo $a->validate();
*
* //显示结果:
* 请填写正确的EMAIL
* ? >
*
*
* @param
* @return string 字符串类型的返回结果
*/
public function validate(){
if (!is_array($this->validateparam)){
return false;
}
foreach($this->validateparam as $k=>$v){
$v['validator'] = strtolower($v['validator']);
if ($v['require'] == ""){
$v['require'] = false;
}
if ($v['input'] == "" && $v['require'] == "true"){
$this->validateparam[$k]['result'] = false;
}else{
$this->validateparam[$k]['result'] = true;
}
if ($this->validateparam[$k]['result'] && $v['input'] != ""){
switch($v['validator']){
case "custom":
$this->validateparam[$k]['result'] = $this->check($v['input'],$v['regexp']);
break;
case "compare":
if ($v['operator'] != ""){
eval("\$result = '" . $v['input'] . "'" . $v['operator'] . "'" . $v['to'] . "'" . ";" );
$this->validateparam[$k]['result'] = $result;
}
break;
case "length":
//判断编码取字符串长度
$input_encode = mb_detect_encoding($v['input'],array('UTF-8','GBK','ASCII',));
$input_length = mb_strlen($v['input'],$input_encode);
if (intval($v['min']) >= 0 && intval($v['max']) > intval($v['min'])){
$this->validateparam[$k]['result'] = ($input_length >= intval($v['min']) && $input_length = 0 && intval($v['max']) validateparam[$k]['result'] = ($input_length == intval($v['min']));
}
break;
case "range":
if (intval($v['min']) >= 0 && intval($v['max']) > intval($v['min'])){
$this->validateparam[$k]['result'] = (intval($v['input']) >= intval($v['min']) && intval($v['input']) = 0 && intval($v['max']) validateparam[$k]['result'] = (intval($v['input']) == intval($v['min']));
}
break;
default:
$this->validateparam[$k]['result'] = $this->check($v['input'],$this->validator[$v['validator']]);
}
}
}
$error = $this->getError();
$this->validateparam = array();
return $error;
}
/**
* 正则表达式运算
*
* @param string $str 验证字符串
* @param string $validator 验证规则
* @return bool 布尔类型的返回结果
*/
private function check($str='',$validator=''){
if ($str != "" && $validator != ""){
if (preg_match($validator,$str)){
return true;
}
else{
return false;
}
}
return true;
}
/**
* 需要验证的内容
*
* @param array $validateparam array("input"=>"","require"=>"","validator"=>"","regexp"=>"","operator"=>"","to"=>"","min"=>"","max"=>"",message=>"")
* input要验证的值
* require是否必填,true是必填false是可选
* validator验证的类型:
* 其中Compare,Custom,Length,Range比较特殊。
* Compare是用来比较2个字符串或数字,operator和to用来配合使用,operator是比较的操作符(==,>,=,validateparam = array_merge($this->validateparam,array($validateparam));
}
/**
* 得到验证的错误信息
*
* @param
* @return string 字符串类型的返回结果
*/
private function getError(){
foreach($this->validateparam as $k=>$v){
if ($v['result'] == false){
return $v['message'];
}
}
return null;
}
}
?>