gpt4 book ai didi

php - 在php中验证日期格式

转载 作者:IT王子 更新时间:2023-10-29 00:20:27 24 4
gpt4 key购买 nike

我正在尝试使用 PHP 验证日期。

我希望以下格式有效:

d/m/yy
d/m/yyyy
dd/m/yy
dd/m/yyyy
d/mm/yy
d/mm/yyyy
dd/mm/yy
dd/mm/yyyy

我已经尝试了许多正则表达式和 checkdate() 函数的不同变体。目前我有这样的东西:

function _date_is_valid($str)
{
if(strlen($str) == 0)
return TRUE;
if(substr_count($str,'/') == 2)
{
if (preg_match("/^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2}))/", $str))
{
$datearray = explode('/',$str);
if($datearray[2] > 2030)
return FALSE;
return checkdate($datearray[1], $datearray[0], $datearray[2]);
}
else
{
return FALSE;
}
}
return FALSE;
}

然而,这会验证像 11/11/200 和 11/11/200 这样的日期#

如何验证日期以符合要求的格式?

编辑:我可以检查 datearray[2] 在 10 到 30 和 2010 到 2030 之间。但是有没有办法使用正则表达式检查它?

Edit1:在 strlen($str) == 0 上返回 TRUE 是因为我希望用户能够在不知道事件何时发生的情况下添加事件,以便其他人可以限定时间表并将事件分配给以后的特定日期


仅作记录。我最终做了:

function _date_is_valid($str)
{
if(strlen($str) == 0) //To accept entries without a date
return TRUE;
if(substr_count($str,'/') == 2)
{
list($d,$m,$y) = explode('/',$str);
if(($y >= 10 && $y <= 30) || ($y >= 2010 && $y <= 2030))
{
return checkdate($m,$d,$y);
}
}
return FALSE;
}

谢谢大家的回答

最佳答案

function _date_is_valid($str) {
if (substr_count($str, '/') == 2) {
list($d, $m, $y) = explode('/', $str);
return checkdate($m, $d, sprintf('%04u', $y));
}

return false;
}

关于php - 在php中验证日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com