我已经做了以下功能,但由于它有点复杂,我不知道如何解决我现在遇到的问题。
现在,该函数在验证它们之前修剪每个输入。
我希望首先检查输入type
是否为password
,以便在验证之前不会修改输入。
public function check($source, $inputs = array()) {
foreach($inputs as $input => $requirements) {
foreach($requirements as $requirement => $reqValue) {
$input = escape($input);
$inputValue = (isset($source[$input])) ? trim($source[$input]) : null;
if($requirement === 'required' && (!isset($inputValue) || empty($inputValue))) {
$this->addError($input, 'required');
//var_dump($this->_errors);
} elseif(!empty($inputValue)) {
switch($requirement) {
case 'min':
if(strlen($inputValue) < $reqValue) {
$this->addError($input, $requirement);
}
break;
case 'max':
if(strlen($inputValue) > $reqValue) {
$this->addError($input, $requirement);
}
break;
case 'match':
if($inputValue != $source[$reqValue]) {
$this->addError($input, $requirement);
}
break;
case 'unique':
$users = $this->_db->query("SELECT * FROM {$reqValue} WHERE {$input} = '{$inputValue}'");
if($users->count()) {
$this->addError($input, $requirement);
}
break;
}
}
}
}
return $this;
}
我用它像:
$validate = new FormValidator();
$validation = $validate->check($_POST, array(
'password' => array(
'type' => 'password', //<-- doesn't work yet in the function
'required' => true,
'min' => 6
),
));
答案 0 :(得分:1)
在第二次预告之前,检查$ input中是否存在type
。
将其存储在临时变量中。
foreach($inputs as $input => $requirements) {
$password = false;
if (array_key_exists('type', $requirements) && $requirements['type'] == 'password') {
$password = false;
}
foreach($requirements as $requirement => $reqValue) {
[...]
...然后在修剪之前检查它:
$inputValue = (isset($source[$input])) ? $source[$input] : null;
if(!$password) {
$inputValue = trim($inputValue);
}