This site uses cookies from Google to deliver its services, to personalize ads and to analyze traffic. Information about your use of this site is shared with Google. By using this site, you agree to its use of cookies. Learn More

[PHP] Date validation for Codeigniter 2

I wrote a tutorial here about the CI date. At that post I used the HTML <select> for the input of date. Sometime our client can want to use text box for the date input. We need the validation for this date. I have found this code from here. It is for CI 1.7.* and PHP 5.2.*. So I change some code for the CI 2.0.* and PHP 5.3.*.

To use, copy the class below into your application/libraries folder named MY_Form_validation.php, then in your controller use it like any other rule.

FormThis validation rule validates an input text box only right now.

<input type="text" name="date" value="<?php echo set_value('date'); ?>" size="10" /> 

Controller Usage
UK
$this->form_validation->set_rules('date', 'date', 'trim|required|valid_date[d/m/y,/]'); 

US
$this->form_validation->set_rules('date', 'date', 'trim|required|valid_date[m/d/y,/]'); 

Database
$this->form_validation->set_rules('date', 'date', 'trim|required|valid_date[y-m-d,-]'); 

Code
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class MY_Form_validation extends CI_Form_validation { function __construct(){ parent::__construct(); } /** * @desc Validates a date format * @params format,delimiter * e.g. d/m/y,/ or y-m-d,- */ function valid_date($str, $params) { // setup $CI =&get_instance(); $params = explode(',', $params); $delimiter = $params[1]; $date_parts = explode($delimiter, $params[0]); // get the index (0, 1 or 2) for each part $di = $this->valid_date_part_index($date_parts, 'd'); $mi = $this->valid_date_part_index($date_parts, 'm'); $yi = $this->valid_date_part_index($date_parts, 'y'); // regex setup $dre = "(0?1|0?2|0?3|0?4|0?5|0?6|0?7|0?8|0?9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31)"; $mre = "(0?1|0?2|0?3|0?4|0?5|0?6|0?7|0?8|0?9|10|11|12)"; $yre = "([0-9]{4})"; $red = ''.$delimiter; // escape delimiter for regex $rex = "/^[0]{$red}[1]{$red}[2]/"; // do replacements at correct positions $rex = str_replace("[{$di}]", $dre, $rex); $rex = str_replace("[{$mi}]", $mre, $rex); $rex = str_replace("[{$yi}]", $yre, $rex); if (preg_match($rex, $str, $matches)) { // skip 0 as it contains full match, check the date is logically valid if (checkdate($matches[$mi + 1], $matches[$di + 1], $matches[$yi + 1])) { return true; } else { // match but logically invalid $CI->form_validation->set_message('valid_date', "The date is invalid."); return false; } } // no match $CI->form_validation->set_message('valid_date', "The date format is invalid. Use {$params[0]}"); return false; } function valid_date_part_index($parts, $search) { for ($i = 0; $i <= count($parts); $i++) { if ($parts[$i] == $search) { return $i; } } } } ?> 
`

0 Response to "[PHP] Date validation for Codeigniter 2"

Posting Komentar

Contact

Nama

Email *

Pesan *