我遇到麻烦,我需要验证与不同日期格式一致的日期,例如
18-11-1991
1991-11-18
18/11/1991
1991/11/18
我需要验证日期是否为字符串,匹配这4种格式中的任何一种,如果没有,发送错误但我无法思考如何,寻找用于其中一种格式的验证方法,我碰巧复制了4但是只有差异是1而不是4?请帮忙。
答案 0 :(得分:2)
这不是一个完整的日期检查,因为它可以构建无效的日期,但也许它足以满足您的目的(并且当没有值时,它无法检测日期和月份的格式,反之亦然大于12 - 在我的代码中也没有值更大19)。我只是将所有格式转换为iso日期,因为它有利于排序或与mysql一起使用:
$dates = array();
$dates[] = "18-11-1991";
$dates[] = "1991-11-18";
$dates[] = "18/11/1991";
$dates[] = "1991/11/18";
$dates[] = "1991 11 18";
foreach($dates as $date) {
$iso_date = "";
if(preg_match("/^([0-3][0-9])-([0-1][0-9])-([0-9]{4})\$/",$date,$reg)) {
$iso_date = $reg[3]."-".$reg[2]."-".$reg[1];
} elseif(preg_match("/^([0-9]{4})-([0-1][0-9])-([0-3][0-9])\$/",$date,$reg)) {
$iso_date = $date;
} elseif(preg_match("/^([0-3][0-9])\/([0-1][0-9])\/([0-9]{4})\$/",$date,$reg)) {
$iso_date = $reg[3]."-".$reg[2]."-".$reg[1];
} elseif(preg_match("/^([0-9]{4})\/([0-1][0-9])\/([0-3][0-9])\$/",$date,$reg)) {
$iso_date = $reg[1]."-".$reg[2]."-".$reg[3];
}
if(empty($iso_date)) {
echo "<br>ERROR: date $date doesn't match one of the supported formats.";
} else {
echo "<br>$date = $iso_date";
}
}
这将输出:
18-11-1991 = 1991-11-18
1991-11-18 = 1991-11-18
18/11/1991 = 1991-11-18
1991/11/18 = 1991-11-18
ERROR: date 1991 11 18 doesn't match one of the supported formats.
编辑:如果您愿意,可以在iso_date上添加支票(如果它是有效日期):
$p = explode("-",$iso_date);
if(count($p)==3 and checkdate($p[1],$p[2],$p[1])) {
echo " (date is valid)";
}