2014-03-24 72 views
0

我有一個CI表單,需要一個十進制數的字段。目前,當字段未通過驗證時,用戶將收到無用的消息。 「該字段必須是小數」。對於認爲他們應該能夠使用領先時期的用戶而言,這是一種糟糕的用戶體驗。例如。」 4" 。我正在嘗試創建自定義回調驗證函數以實現自定義錯誤消息。這裏是我的控制器(簡體)...自定義回調驗證功能實現自定義錯誤消息

<?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; 
     } 
    } 
} 
?> 

測試時,不會引發錯誤,自從我從十進制十進制定製改變了驗證。我錯過了什麼嗎?

回答

0

preg_match()返回TRUE,當它是一個有效的數字,但你試圖拋出一個錯誤。做相反的事情(注意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; 
} 
+0

謝謝,這似乎現在工作。 –

+0

你知道我如何在這個陳述中添加允許空/空嗎?如果表單爲空,即使我沒有設置「必需」,它也會拋出錯誤。 –

+0

我不確定這個正則表達式,但你可以簡單地做: (!preg_match('/^[\ - +]?[0-9] + \。[0-9] + $ /',$ str)| |空($ str)) – lokers