我正在尝试对必须具有不同值的2字段进行验证。我只知道如何设置验证匹配值的规则。
$this->form_validation->set_rules('book1','Book1','required|matches[book2]');
$this->form_validation->set_rules('book2','Book2','required|matches[book1]');
如果我输入book1
= novel
和book2
= novel
,则上述代码将返回TRUE
。
如何验证每个字段的值彼此不匹配的2个字段?因此,如果我输入book1
= novel
和book2
= comic
,则会返回TRUE
。
答案 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]');