Codeigniter - 表单验证2字段,不匹配值

时间:2014-11-07 08:53:30

标签: php codeigniter validation

我正在尝试对必须具有不同值的2字段进行验证。我只知道如何设置验证匹配值的规则。

$this->form_validation->set_rules('book1','Book1','required|matches[book2]');
$this->form_validation->set_rules('book2','Book2','required|matches[book1]');

如果我输入book1 = novelbook2 = novel,则上述代码将返回TRUE

如何验证每个字段的值彼此不匹配的2个字段?因此,如果我输入book1 = novelbook2 = comic,则会返回TRUE

3 个答案:

答案 0 :(得分:7)

您应该使用callback_方法进行自定义验证,CI表单验证库不提供notMatch类型验证规则,请参阅下面的示例代码。

$this->form_validation->set_rules('book1','Book1','required');
$this->form_validation->set_rules('book2','Book2','required|callback__notMatch[book1]');

在控制器类中放置方法

function _notMatch($book2Value, $book1FieldName){
   if($book2Value != $this->input->post($book1FieldName){
       $this->form_validation->set_message('_notMatch', 'book1 and book2 values are not matching');
       return false;
   }
   return true;
}

答案 1 :(得分:2)

在codeigniter 3中,您可以使用differents []设置规则来强制字段值不匹配。

$this->form_validation->set_rules('book1', 'Book 1', 'required|differs[book2]');
$this->form_validation->set_rules('book2', 'Book 2', 'required|differs[book1]');

这意味着您不需要创建不必要的回调。但是,对于旧版本,您会的。

有关更多信息,请参见文档:Codeigniter 3 Documentation

答案 2 :(得分:0)

您可以像这样使用differs

 $this->form_validation->set_rules('password', 'current password', 'max_length[25]|min_length[5]|required');
 $this->form_validation->set_rules('new_password', 'new password', 'max_length[25]|min_length[5]|required|differs[password]');
 $this->form_validation->set_rules('confirm_password', 'confirm password', 'required|max_length[25]|min_length[5]|matches[new_password]');