自定义回调验证功能,以实现自定义错误消息

时间:2014-03-24 21:28:07

标签: php codeigniter

我有一个CI表格,其字段需要十进制数字。目前,当字段验证失败时,用户会收到无用的消息。 "该字段必须为十进制"。对于认为应该能够使用领先时段的用户来说,这是一种糟糕的用户体验。例如" 0.4&#34 ;.我正在尝试创建自定义回调验证函数来实现自定义错误消息。这是我的控制器(简化)......

<?php

class Form extends CI_Controller {

    function index()
    {
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');        

    $this->form_validation->set_rules('expenses', 'Expenses',   'trim|max_length[50]|callback_decimalcustom|xss_clean');

        if ($this->form_validation->run() == FALSE)
        {
    $parent_data = array('country' => $countrydata, 'currency' => $currencydata, 'tour' => $tourdata, 'riders' => $ridersdata, 'measurement' => $measurementdata, 'tourdistance' => $tourdistance);
    $this->load->view('myform', $parent_data);
        }
        else        
    {                       
    $sql= array (
        'expenses'=>$this->input->post('expenses'),
            );
    $ins = $this->db->insert('donations',$sql);

    $this->load->view('formsuccess');
        }
    }   
    public function decimalcustom($str) //Custom decimal message
    {    
        if (preg_match('/^[\-+]?[0-9]+\.[0-9]+$/', $str))
        {
            $this->form_validation->set_message('decimalcustom', 'The %s field is required in 0.00 format.');
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }
}
?>

测试时,自从我将验证从十进制更改为十进制自定义以来,不会抛出错误。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

preg_match()如果是有效数字则返回TRUE,但您尝试抛出错误。做oposite ..(注意preg_match之前的感叹号)

if ( !preg_match('/^[\-+]?[0-9]+\.[0-9]+$/', $str) ) {
   $this->form_validation->set_message('decimalcustom', 'The %s field is required in 0.00 format.');
   return FALSE;
}
else {
   return TRUE;
}