如何在返回一个或多个日期时验证日期格式


How to validate date format when one or more dates are returned

我有一个使用jquery日期选择器的表单。我已经将其设置为允许多个日期选择,它最多可以返回4个日期,也可以返回1个日期。我在regex方面做得很糟糕,当日期是2位数(即10-31)时,下面的方法有效,但当日期是个位数,没有前导零时,它会失败得很惨。请帮我一下正则表达式?

if(!empty($_POST['auction_date'])){
    $new_dates = explode('+',$_POST['auction_date']);
    foreach ($new_dates as $date){
        if(!preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)){
            $errormsg[] = 'Date format is incorrect.';
        }
    }
}

您实际上可以通过两个步骤来完成。

  • 只需使用'/'b'd{4}-'d{2}-'d{2}'b/'正则表达式即可收集所有日期
  • 使用本SO帖子中描述的日期验证

示例PHP代码:

$s = "2015-12-23: started. 2017-02-29 ended";
preg_match_all('/'b(?<year>'d{4})-(?<month>'d{2})-(?<day>'d{2})'b/', $s, $m, PREG_SET_ORDER);
foreach ($m as $dt)
{
    if (checkdate($dt["month"], $dt["day"], $dt["year"]) == true)
        echo "Valid date: " . $dt[0] . PHP_EOL;
    else
        echo "Invalid date: " . $dt[0] . PHP_EOL;
}

输出:

Valid date: 2015-12-23 Invalid date: 2017-02-29