【问题标题】:Validate date dd/mm/yyyy验证日期 dd/mm/yyyy
【发布时间】:2013-07-06 11:42:47
【问题描述】:

我有一个 textbox 的过去日期,当我想验证表单时,如果日期大于当前日期并且格式为 dd/mm/yyyy,则提交。

在我的 form_validation.php 中:

'add_prod_serv_fact' => array(
    'quantidade_prod'           => array('field' => 'quantidade_prod',          'label' => 'Quantidade',        'rules' => 'required|trim|numeric|greater_than[0]|htmlspecialchars'),
    'desconto_prod'             => array('field' => 'desconto_prod',            'label' => 'Desconto',          'rules' => 'required|trim|numeric|greater_than[-1]|less_than[101]|htmlspecialchars'),
    'date'                      => array('field' => 'date',                     'label' => 'Date',              'rules' => 'required|trim|htmlspecialchars')
)

如何验证日期?

【问题讨论】:

标签: php regex codeigniter validation date


【解决方案1】:

你可以先通过正则表达式验证你应该写一个这样的函数

function validate_date_reg($input)
{
   if (preg_match('\d{1,2}/\d{1,2}/\d{4}', $input))
   {
      return true; // it matched, return true
   }
   else
   {
      return false;
   }
}

然后这样称呼它:

if($this->validate_date_reg($this->input->post('some_data')))
{
    // true go ahead......
}

希望对你有所帮助。

【讨论】:

  • 有没有办法在单行中使用正则表达式参数进行表单验证
【解决方案2】:

1) 如何使用CI callbacks 验证日期:

“验证系统支持回调您自己的验证函数。这允许您扩展验证类以满足您的需求。”

在你的方法中:

$this->form_validation->set_rules('text_date', 'Date', 'trim|exact_length[10]|callback_validate_date');

你自己的回调函数:

public function validate_date($incoming_date)
{
    //If in dd/mm/yyyy format
    if (preg_match("^\d{2}/\d{2}/\d{4}^", $incoming_date))
    {
        //Extract date into array
        $date_array = explode('/', $incoming_date);

        //If it is not a date
        if(! checkdate($date_array[1], $date_array[0], $date_array[2]))
        {
            $this->form_validation->set_message('validate_date', 'Invalid date');
            return false;
        }
    }
    //If not in dd/mm/yyyy format
    else
    {
        $this->form_validation->set_message('validate_date', 'Invalid date');
        return false;
    }

    return true;
}

2)如何比较两个日期:

$date_one = (int) strtotime(str_replace('/', '-', $this->input->post('date_one', true)));
$date_two = (int) strtotime(str_replace('/', '-', $this->input->post('date_two', true)));

if($date_one < $date_two)
{
    echo 'Message';
}
else
{
    echo 'Message';
}

【讨论】:

    【解决方案3】:

    试试这个..

    you need to down date.js from this url "https://code.google.com/p/datejs/downloads/list"
    

    调用datefunction()函数形式onChange()

    <script>
        function datefunction()
        {
            var startdate = document.getElementById('date1').value;
            var enddate  = document.getElementById('date2').value;
            // for current date use
            // var enddate  = new Date();
    
            var d1 = Date.parse(startdate );
            var d2 = Date.parse(enddate  ) ;
    
            if (d1 > d2) 
            {
                alert ("Start Date cannot be gratter than End Date!");
    
                return false;
            }
        }
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-12
      • 2014-01-18
      • 2022-11-29
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多