编码点火器:日期验证


Codeigniter: date validation

有谁知道如何验证日期。例如,cannot have 30 Feb ,并且no 31 in certain month,因此当用户输入 valid 时,它将被拒绝。我正在考虑回调函数,但不确定它将如何完成。

使用 PHP checkdate 函数创建回调函数

使用本指南在 Codeigniter 中创建回调函数。

试试这个,代码也考虑了闰年

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');
您可以使用

简单的正则表达式来验证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;
   }
}