2012-09-04 47 views
0

您好我正在使用codeigniter表單驗證。自定義驗證方法不適用在代碼驗證表單驗證中使用'CI'

我libraray

我設置表單驗證

$this->ci->form_validation->set_rules ('businessemail', 'Business Email', 'required|xss_clean|min_length[6]|callback_valid_email_check'); 

和我valid_email_check功能

public function valid_email_check($email_address) 
{ 
    if(!trim($email_address)) 
    { 
     return TRUE; 
    } 
    $email_explode = explode("@", $email_address); 

    $valid = preg_match("/^(?![_.])(?!.*[_.]{2})[a-zA-Z0-9._]+(?<![_.])$/",trim($email_explode[0])); 

    if(!$valid) 
    { 
     $this->ci->form_validation->set_message('valid_email_check', 'The %s field contains invalid charaters'); 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 
} 

事情是

required|xss_clean|min_length[6] 

正確驗證,唯一的自定義驗證消息不管用 。

你有什麼我在這裏做,我想用CI,可能是問題, 如何解決這個問題,在此先感謝

+2

爲什麼不使用內置的valid_email方法? –

+0

@shayan,我想添加一些自定義驗證 –

回答

0

你怎麼知道的自定義驗證不工作?

下面的回報是什麼?

public function valid_email_check($email_address) 
{ 
    this->ci->form_validation->set_message('valid_email_check', 'The %s field contains invalid charaters'); 
    return FALSE; 
} 

此外,您的valid_email_check位於何處?即它在哪個文件中?

+0

valid_email_check函數是同一個文件,公共函數valid_email_check() –

+0

什麼也沒有發生,它只是忽略驗證 –

+0

當你直接運行它(沒有CI的表單驗證) ?將其設置爲基於false或true來回顯某些內容。 – Mudshark

1

你說你要在庫中設置驗證規則。根據CodeIgniter的用戶指南,這應該在controller中完成,或者您可以將它們保存在config file中。

這是什麼目的? -

if(!trim($email_address)) 
{ 
    return TRUE; 
} 

這種邏輯似乎有點倒退到我,示例 - 如果你傳遞了一個空字符串的函數,它將返回TRUE。除非我錯過了這一點,這不是你想要達到的目標。

您可以將trim添加到您的$this->ci->form_validation->set_rules參數中,並將其從valid_email_check函數中刪除。

剛剛使用CI的valid_email規則時出現了什麼問題?除非你有充分的理由,否則不要重新發明輪子。

這是一個可以接受的解決方案嗎? -

$this->ci->form_validation->set_rules ('businessemail', 'Business Email', 'trim|required|xss_clean|min_length[6]|valid_email'); 

如果您已經擴展了form_validation庫,這是你的功能,那麼你不需要用callback_前綴它。