【问题标题】:CI Form Validation of Date. with input type="date"CI 表格验证日期。输入类型=“日期”
【发布时间】:2015-11-29 18:24:57
【问题描述】:

验证具有输入 type="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');

        }
    }

提前致谢。
-蚂蚁

【问题讨论】:

    标签: php codeigniter validation date


    【解决方案1】:
    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;
          }
      }
      

    有关 DateTime:createFromFormat http://php.net/manual/en/datetime.createfromformat.php 的更多信息。我会坚持 YYYY-MM-DD 格式,因为它很常见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      相关资源
      最近更新 更多