2012-12-10 95 views
5

我一直在尋找其他類似的帖子,這個問題似乎是一個非轉義的斜線。但是我逃避了他們。在CodeIgniter form_validation regex_match生成:消息:preg_match():沒有結尾分隔符'/'找到

這是字符串應該是什麼樣子:

23/12/2012

,這是我如何聲明驗證規則:

regex_match[/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)[0-9]{2}$/] 

結束符是在那裏,日期中的兩個斜槓之間用反斜槓轉義。我也試過這是略有不同,但我得到了同樣的錯誤:

regex_match[/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d$/] 

哪裏出錯?

編輯:

按照你的建議,我已經使用一個回調函數嘗試。這是聲明,這是位於控制器類中,其中正在執行的形式驗證:

function mach_date($date) { 
    /* DEBUG */ echo 'Here I am!'; exit; // execution should stop here displaying the echo 
    return (bool)preg_match('/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20)\d\d$/', $date); 
} 

驗證規則在應用/配置/ form_validation.php

$config = array(
    // other validation groups....., 
    'articles' => array(
      // other validated fields....., 
      array(
       'field' => 'date_p', 
       'label' => 'Publishing date', 
       'rules' => 'callback_match_date' 
     ) 
    ) 
); 
+0

你可以發佈一些更多的問題代碼本身 –

+0

@JulienMay我已經添加了該問題的更多信息 –

回答

5

當設置驗證規則,將它們與|分開所以|在你的正則表達式中導致驗證規則在那些引起錯誤的分割。討論here的問題。它似乎是Codeigniter中的一個限制或錯誤。您可以通過運行帶和不帶|的正則表達式來測試它,並查看管道的使用是否會導致錯誤。如果是這種情況,那麼你可能需要通過其他方式通過正則表達式驗證,也許使用回調函數,詳見這個page,你的函數將使用正則表達式進行preg_match,它需要在函數內部,然後返回true /假。

+0

我看,謝謝你的信息。現在我試圖使用回調,但是由於我的規則是在config/form_validation.php中實現的,而不是在同一個控制器中,出於某種原因它沒有被調用。我把回調放在控制器中,並且在位於application/core目錄中的父控制器中嘗試。但回調沒有執行。 –

+0

你可以在問題中發佈回調函數和代碼,以便我可以看到它是如何完成的。還請指明每個文件和類別的位置。 –

+0

我已添加更多信息 –