重构php过滤器/验证

重构php过滤器/验证,php,validation,filter,Php,Validation,Filter,我想重构这段代码,它从表单中获取输入,然后清理输入,然后检查是否为空或太短。它对标题、内容和标记执行此操作。它将在名为errors的数组中存储遇到的错误 我想做一个函数,类似这样: function validate_input($args) 除了我不确定我将如何实现它,以及它将如何建立一个错误列表 (我知道我可以使用PEAR QUICKFORM或php表单生成器类,所以请不要提到“哦,使用类xyz”) $title=filter\u输入(输入帖子,'thread\u title',filte

我想重构这段代码,它从表单中获取输入,然后清理输入,然后检查是否为空或太短。它对标题、内容和标记执行此操作。它将在名为errors的数组中存储遇到的错误

我想做一个函数,类似这样:

function validate_input($args)
除了我不确定我将如何实现它,以及它将如何建立一个错误列表

(我知道我可以使用PEAR QUICKFORM或php表单生成器类,所以请不要提到“哦,使用类xyz”)

$title=filter\u输入(输入帖子,'thread\u title',filter\u SANITIZE\u字符串,
数组('flags'=>FILTER_FLAG_STRIP_HIGH | FILTER_FLAG_STRIP_LOW));
$content=filter_input(输入_POST,'thread_content');
$tags=过滤器输入(输入“线程标记”);
#标题如下:
如果(is_null($title)| |$title==“”)#is_null本身由于某种原因返回false
{
$errors['title']=“需要标题。”;
}
elseif($title==false)
{
$errors['title']=“标题无效。”;
}
埃尔塞夫(斯特伦($title)<15)
{
$errors['title']=“标题太短,最少15个字符(最多40个字符)。”;
}
elseif(斯特伦($title)>80)
{
$errors['title']=“标题太长,最多80个字符。”;
}
#内容从这里开始:
如果(为空($content)| |$content==“”)
{
$errors['content']=“需要内容。”;
}
elseif($content==false)
{
$errors['content']=“内容无效。”;
}
elseif(strlen($content)<40)
{
$errors['content']=“内容太短,至少40个字符。”;#TODO:更改所有最小字符数
}
elseif(strlen($content)>800)
{
$errors['content']=“内容太长,最多800个字符。”;
}
#标签在这里:
如果(为空($tags)| |$tags==“”)
{
$errors['tags']=“需要标记。”;
}
elseif($title==false)
{
$errors['tags']=“内容无效。”;
}
elseif(strlen($tags)<3)
{
$errors['tags']=“至少需要一个标记,长度为3个字符。”;
}
var_dump($错误);

如果正确理解问题,并且只想验证和清理这三个变量,那么应该非常简单

function validateAndSanitizeInput(Array $args, Array &$errors) {
//validation goes in here
return $args;
}
在这种情况下,errors数组是通过引用传递的,因此您可以在调用函数后从中获取错误消息

$errors = array();
$values = validateAndSanitizeInput($_POST, $errors);
//print $errors if not empty etc.
顺便说一下,您可以将“is_null($content)| |$content==”替换为“empty($content)”

$errors = array();
$values = validateAndSanitizeInput($_POST, $errors);
//print $errors if not empty etc.