示例#1
0
 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;
     }
 }