CI表格验证日期。输入类型=“日期”

时间:2015-09-03 19:16:05

标签: php codeigniter validation date

验证具有输入类型=“日期”的表单,该表单输入mm / dd / yyyy 但是,如果我将var_dump结果显示为yyyy-mm-dd。

1验证输入类型“mm / dd / yyyy”,还是验证“yyyy-mm-dd”。

---我假设我验证var_dump给我的是yyyy-mm-dd。

2更重要的是,我很难找到最简单的验证日期的方法。

---我不知道如何在不经过手工检查和检查每一个日期的情况下验证日期。是否有一些我可以使用的内置函数,以及如何使用我已经拥有的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

1 个答案:

答案 0 :(得分:2)

  1. 设置您自己的回调规则

    $this->form_validation->set_rules('DOB', 'Date of Birth', "trim|required|callback_dob_check");
    
  2. 在同一控制器内写入功能。日期验证理念取自: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;
        }
    }
    
  3. 有关DateTime的更多信息:createFromFormat http://php.net/manual/en/datetime.createfromformat.php。我会坚持使用YYYY-MM-DD格式,因为它经常使用。