验证具有输入类型=“日期”的表单,该表单输入mm / dd / yyyy 但是,如果我将var_dump结果显示为yyyy-mm-dd。
---我假设我验证var_dump给我的是yyyy-mm-dd。
---我不知道如何在不经过手工检查和检查每一个日期的情况下验证日期。是否有一些我可以使用的内置函数,以及如何使用我已经拥有的CI表单验证来实现它。
function check_registration($post_data)
{
// Validations:
// first_name
$this->form_validation->set_rules('first_name', 'First Name', "trim|required");
// last_name
$this->form_validation->set_rules('last_name', 'Last Name', "trim|required");
// email
$this->form_validation->set_rules('email', 'Email', "trim|required|valid_email|is_unique[users.email]");
// password
$this->form_validation->set_rules('password', 'Password', "trim|required|min_length[6]");
// confirm_password
$this->form_validation->set_rules('confirm_password', 'Confirm Password', "trim|required|matches[password]");
// DOB
$this->form_validation->set_rules('DOB', 'Date of Birth', "trim|required");
// run validations:
if ($this->form_validation->run() === False)
{
// set flash data errors
$this->session->set_flashdata("reg_first_name_error", form_error('first_name'));
$this->session->set_flashdata("reg_last_name_error", form_error('last_name'));
$this->session->set_flashdata("reg_email_error", form_error('email'));
$this->session->set_flashdata("reg_password_error", form_error('password'));
$this->session->set_flashdata("reg_confirm_password_error", form_error('confirm_password'));
$this->session->set_flashdata("reg_DOB_error", form_error('DOB'));
redirect('/');
}
// No errors:
else
{
$this->insert($post_data);
redirect('/success');
}
}
提前致谢。
-Ants
答案 0 :(得分:2)
设置您自己的回调规则
$this->form_validation->set_rules('DOB', 'Date of Birth', "trim|required|callback_dob_check");
在同一控制器内写入功能。日期验证理念取自:Using filter_var() to verify date?。
public function dob_check($str){
if (!DateTime::createFromFormat('Y-m-d', $str)) { //yes it's YYYY-MM-DD
$this->form_validation->set_message('dob_check', 'The {field} has not a valid date format');
return FALSE;
} else {
return TRUE;
}
}
有关DateTime的更多信息:createFromFormat http://php.net/manual/en/datetime.createfromformat.php。我会坚持使用YYYY-MM-DD格式,因为它经常使用。