有谁知道如何验证日期。例如,cannot have 30 Feb
和no 31 in certain month
因此当用户输入有效时,它将被拒绝。我想到了一个回调函数,但不确定它是如何完成的。
答案 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;
}
}