static function validate_date($input, $form_id_num) { // Checks date input for proper formatting of actual calendar dates // Matches the date format and also validates month and number of days in a month. // All leap year dates allowed. if (!self::$form_options) { self::$form_options = FSCF_Util::get_form_options($form_id_num, $use_defaults = true); } $date_format = self::$form_options['date_format']; // find the delimiter of the date_format setting: slash, dash, or dot if (strpos($date_format, '/')) { $delim = '/'; $regexdelim = '\\/'; } else { if (strpos($date_format, '-')) { $delim = '-'; $regexdelim = '-'; } else { if (strpos($date_format, '.')) { $delim = '.'; $regexdelim = '\\.'; } } } if ($date_format == "mm{$delim}dd{$delim}yyyy") { $regex = "/^(((0[13578]|(10|12)){$regexdelim}(0[1-9]|[1-2][0-9]|3[0-1]))|(02{$regexdelim}(0[1-9]|[1-2][0-9]))|((0[469]|11){$regexdelim}(0[1-9]|[1-2][0-9]|30))){$regexdelim}[0-9]{4}\$/"; } if ($date_format == "dd{$delim}mm{$delim}yyyy") { $regex = "/^(((0[1-9]|[1-2][0-9]|3[0-1]){$regexdelim}(0[13578]|(10|12)))|((0[1-9]|[1-2][0-9]){$regexdelim}02)|((0[1-9]|[1-2][0-9]|30){$regexdelim}(0[469]|11))){$regexdelim}[0-9]{4}\$/"; } if ($date_format == "yyyy{$delim}mm{$delim}dd") { $regex = "/^[0-9]{4}{$regexdelim}(((0[13578]|(10|12)){$regexdelim}(0[1-9]|[1-2][0-9]|3[0-1]))|(02{$regexdelim}(0[1-9]|[1-2][0-9]))|((0[469]|11){$regexdelim}(0[1-9]|[1-2][0-9]|30)))\$/"; } if (!preg_match($regex, $input)) { return false; } else { return true; } }