有谁知道如何验证日期。例如,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;
}
}