2015-02-11 254 views
0

有谁知道如何验证日期。例如,cannot have 30 Febno 31 in certain month,所以当用户输入有效时,它将被拒绝。我正在考虑回拨功能,但不知道如何完成。Codeigniter:日期验证

+0

你一定会n eed使用回调。您如何决定接近回调将取决于您的需求以及您要求和希望获得的输入类型。您可以考虑实现PHP的DateTime类的回调。无效的输入将返回false,并且回调会执行相同的操作。或者,如果您使用的是特定格式,则可以使用date_create_from_format()。再次,这取决于你的要求。 – 2015-02-11 04:34:03

+0

使用任何jquery日历日历插件在文本字段中添加日期它会给你适当的日期 – umefarooq 2015-02-11 04:43:14

+0

有没有任何指南呢?谢谢 – Outliers 2015-02-11 05:03:24

回答

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确认这将确保月月这是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; 
    } 
} 
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');