2015-02-11 159 views
0

有誰知道如何驗證日期。例如,cannot have 30 Febno 31 in certain month,所以當用戶輸入有效時,它將被拒絕。我正在考慮回撥功能,但不知道如何完成。Codeigniter:日期驗證

+0

你一定會n eed使用回調。您如何決定接近回調將取決於您的需求以及您要求和希望獲得的輸入類型。您可以考慮實現PHP的DateTime類的回調。無效的輸入將返回false,並且回調會執行相同的操作。或者,如果您使用的是特定格式,則可以使用date_create_from_format()。再次,這取決於你的要求。 – 2015-02-11 04:34:03

+0

使用任何jquery日曆日曆插件在文本字段中添加日期它會給你適當的日期 – umefarooq 2015-02-11 04:43:14

+0

有沒有任何指南呢?謝謝 – Outliers 2015-02-11 05:03:24

回答

0

您可以使用簡單的正則表達式來驗證日期dd-mm-yyyy格式

$this->form_validation->set_rules('dob', 'Date in dd-mm-yyyy', 
     'regex_match[(0[1-9]|1[0-9]|2[0-9]|3(0|1))-(0[1-9]|1[0-2])-\d{4}]'); 

使用callback確認這將確保月月這是28天使用

//Add a rule for validation 
$this->form_validation->set_rules('dob', 'Date of Birth', 'callback_valid_date'); 

//Define a callback and pass the format of date 
public function valid_date($date, $format = 'Y-m-d') 
{ 
    $d = DateTime::createFromFormat($format, $date); 
    //Check for valid date in given format 
    if($d && $d->format($format) == $date) { 
     return true; 
    } else { 
    $this->form_validation->set_message('valid_date', 
       'The %s date is not valid it should match this ('.$format.') format'); 
     return false; 
    } 
} 
1

嘗試這樣做的代碼也考慮閏年

function valid_date($date) 
{  
    $pattern = '/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/'; 

    if(preg_match($pattern, $date)) 
    { 
     return true; 
    } 
    else 
    { 
     $this->form_validation->set_message('valid_date', 'The %s is not valid it should match this dd/md/yyyy format'); 
     return false; 
    } 
} 
//and just use this to set rules 
$this->form_validation->set_rules('Your date field from html', 'date', 'required|callback_valid_date');