Я пишу метод проверки ввода для codeigniter, чтобы проверить формат даты.На самом деле я просто делаю это в тестовом скрипте, чтобы получить функциональность.У меня есть кое-что, что работает, но я просто хотел бы посмотреть, подхожу ли я к этому наилучшему (или худшему) способу.
Действительно конкретно я смотрю на вторую половину, я прокомментировалукажите, что я имею в виду.
<?
$input = $_POST['input']; //text input of intended format
$date = $_POST['date']; //text input of date in matching format
//examples: y-m-d, Y.M.D, m/D/Y (Case has no affect)
//I'm setting up a regex string based on given format
$pattern = preg_replace('/[yY]/','([0-9]{4})',$input);
$pattern = preg_replace('/[mM]/','([0-9]{1,2})',$pattern);
$pattern = preg_replace('/[dD]/','([0-9]{1,2})',$pattern);
//escaping slashes (if used as date delimiter)
$pattern = str_replace('/','\/',$pattern);
echo "Format : " . $input . "<br />";
echo "Date : " . $date . "<br/>";
echo "============" . "<br />";
echo "<br/>";
//if given date matches given format
if(preg_match('/^'.$pattern.'$/',$date,$matches)) {
echo 'YAY A MATCH! <br/>';
//From here down seems like it could be improved, seems a bit brute force
//All of this below, is trying to get the order of the format so I can feed the proper values
//to the checkdate() function to check date validity.
preg_match('/[yY]/', $input, $match_year,PREG_OFFSET_CAPTURE);
preg_match('/[mM]/', $input, $match_month,PREG_OFFSET_CAPTURE);
preg_match('/[dD]/', $input, $match_day,PREG_OFFSET_CAPTURE);
if ($match_year[0][1] < $match_month[0][1] && $match_year[0][1] < $match_day[0][1]) {
$year = $matches[1];
array_splice($matches,1,1);
}
else if ($match_year[0][1] > $match_month[0][1] && $match_year[0][1] > $match_day[0][1]) {
$year = $matches[3];
array_splice($matches,3,1);
}
else {
$year = $matches[2];
array_splice($matches,2,1);
}
if ($match_month[0][1] < $match_day[0][1]) {
$month = $matches[1];
$day = $matches[2];
}
else {
$month = $matches[2];
$day = $matches[1];
}
echo "<br/>";
echo "<br/>";
echo $month . ' / ' . $day . ' / ' . $year . "<br/>";
if (checkdate($month,$day,$year)) {
echo "This is a valid date.";
}
else {
echo "This is not a valid date";
}
}
else {
echo "Given date does not match given format";
}