Codeigniter:日期验证

时间:2015-02-11 04:08:41

标签: php validation codeigniter

有谁知道如何验证日期。例如,cannot have 30 Febno 31 in certain month因此当用户输入有效时,它将被拒绝。我想到了一个回调函数,但不确定它是如何完成的。

3 个答案:

答案 0 :(得分:2)

使用PHP checkdate函数

创建回调函数

使用this guide在Codeigniter中创建回调函数。

答案 1 :(得分: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');

答案 2 :(得分: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验证这将确保2月份是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;
   }
}