Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查月份的错误';s天_Php_Regex_Datetime - Fatal编程技术网

Php 如何检查月份的错误';s天

Php 如何检查月份的错误';s天,php,regex,datetime,Php,Regex,Datetime,我正在尝试进行用户注册。我只想问一下使用3个输入的日期type=“text”如何使用PHP清理月、日和年。如果二月是闰年或十一月,则只有30天,用户输入31天。谢谢大家 if (isset($_POST['submit'])) { $yy = preg_replace('#[^0-9]#i','',$_POST['yy']); $mm = preg_replace('#[^0-9]#i','',$_POST['mm']); $dd = preg_replace('#[^0

我正在尝试进行用户注册。我只想问一下使用3个输入的日期type=“text”如何使用PHP清理月、日和年。如果二月是闰年或十一月,则只有30天,用户输入31天。谢谢大家

if (isset($_POST['submit'])) {
    $yy = preg_replace('#[^0-9]#i','',$_POST['yy']);
    $mm = preg_replace('#[^0-9]#i','',$_POST['mm']);
    $dd = preg_replace('#[^0-9]#i','',$_POST['dd']);
    if ($mm > 12) {
        $error[] = 'Invalid month.';
    } else if ($dd > 31) {
        $error[] = 'Invalid day.';
    } else if (strlen($yy) < 4) {
        $error[] = 'Invalid year.';
    }
}
if(isset($\u POST['submit'])){
$yy=preg#u replace('#[^0-9]#i',''.$#u POST['yy']);
$mm=preg#u replace(“#[^0-9]#i”,“,$”POST['mm');
$dd=preg#u replace(“#[^0-9]#i”,“,$”POST['dd]”);
如果($mm>12){
$error[]=“无效月份”;
}否则,如果($dd>31){
$error[]=“无效日期”;
}否则如果(斯特伦($yy)<4){
$error[]=“无效年份”;
}
}

checkdate功能可能会满足您的需求:


如果日期正确,则返回true,否则返回false

 <?php
    var_dump(checkdate(12,31,-400));  ///bool(false)
    echo "<br>";
    var_dump(checkdate(2,29,2003));  ////bool(false)
    echo "<br>";
    var_dump(checkdate(2,29,2004));  ////bool(true)
    ?>

以下正则表达式可以验证正确和不正确的日期,但您需要对代码进行重构,例如

根据下面的正则表达式“2013-09-12”解析有效日期

或者使用Php CheckDate函数检查日期的有效性

bool checkdate ( int $month , int $day , int $year )

你好,大卫,谢谢!我会试试那个检查日期函数。如果其中一个答案是有用的,请考虑“接受”它。谢谢你,先生,我会试试。我用这个代码,它返回false。格式yy mm dd“1992-10-5”如果(preg#u match('#^('#{4})-(d{2})$#',$releasedate,$matches)和checkdate($matches[2],$matches[3],$matches[1]){返回true;}否则{$error[]=“发布日期似乎无效”。;返回false;}我的输入是“mm-dd-YYYYY”,我输入这些“10-5-1992”它返回一条错误消息,可能代码为$yy=preg_replace('#[^0-9]#i','',$_POST['yy'])$mm=预替换(“#[^0-9]#i”、“,$”后['mm'])$dd=preg#u replace('#[^0-9]#i','''.$#u POST['dd'])$发布日期=$yy.-'.$mm.-'.$dd;如果(preg_match(“/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/”,$releasedate,$matches)&&checkdate($matches[1],$matches[2],$matches[0]){return true;}否则{$error[]='发布日期似乎无效。;}
$date = $_POST['yy'].'-'.$_POST['mm'].'-'.$_POST['dd'];
$date = $yy.'-'.$mm.'-'.$dd';   // after retrieving values of month, year, day

if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date))
{
    return true; // date is valid in above define format
}else{
    return false; // invalid date
}
bool checkdate ( int $month , int $day , int $year )