我有一个使用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