需要在复杂的FormValidator功能中进行小的trim()调整

时间:2014-04-16 07:44:42

标签: php function validation oop methods

我已经做了以下功能,但由于它有点复杂,我不知道如何解决我现在遇到的问题。

现在,该函数在验证它们之前修剪每个输入。

我希望首先检查输入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
    ),
));

1 个答案:

答案 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);
}