我正在使用codeigniter 3.1.1。我是codeigniter的新手,我遇到了一个问题,我可以搞清楚。我的回调函数似乎影响了所需的验证,因为似乎跳过了所需的规则,即使字段为空,也会执行回调函数。这是我的代码
$validate_data = array(
array(
'field' => 'pages',
'label' => 'No of pages',
'rules' => 'trim|required|integer|callback_regex_pages'
)
);
$this->form_validation->set_rules($validate_data);
$this->form_validation->set_error_delimiters('<p class="text-danger">','</p>');
我的回调功能
public function regex_pages(){
if(!preg_match('/^\d(\d)?(\d)?$/',$this->input->post('pages'))){
$this->form_validation->set_message('regex_pages', 'The {field} is not valid!');
return false;
}else{
return true;
}
}//end method regex_pages
这只是我用这种方式行动的众多回调之一。如果我删除回调规则,则执行所需规则
这是我的输出
答案 0 :(得分:1)
无论字段值是否有效,都设置消息。
public function regex_pages($value){
//set message anyway
$this->form_validation->set_message('regex_pages', 'The {field} is not valid!');
//the rule will be available for any field, not just for pages
return (bool) preg_match('/^\d(\d)?(\d)?$/',$value);
}
您还可以使用Codeigniter regex_match规则。 http://www.codeigniter.com/user_guide/libraries/form_validation.html?highlight=form%20validation#CI_Form_validation
'rules' => 'trim|required|integer|regex_match[//]'
答案 1 :(得分:0)
我建议您通过创建一个名为&#34; MY_form_validation&#34;的新库来扩展您的表单验证库。这将扩展&#34; CI_form_validation&#34;并将其保存在&#34; libraries&#34;夹;在此之后,将所有回调函数放在MY_form_validation中,这样,您将有全局可用的回调,但请记住,您不需要使用前缀&#34;回调&#34;设置规则。 这是一个例子:
$validate_data = array(
array(
'field' => 'pages',
'label' => 'No of pages',
'rules' => 'trim|required|integer|regex_pages'
)
);
$this->form_validation->set_rules($validate_data);
$this->form_validation->set_error_delimiters('<p class="text-danger">','</p>');
因此,在MY_form_validation中,您将创建函数
public function regex_pages($value_to_be_validated){
if(!preg_match('/^\d(\d)?(\d)?$/',$value_to_be_validated)){
$this->set_message('regex_pages', 'The {field} is not valid!');
return false;
}else{
return true;
}