Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
用于日期验证的正则表达式帮助-dd/mm/yyyy-PHP_Php_Regex_Datetime_Date_Preg Match - Fatal编程技术网

用于日期验证的正则表达式帮助-dd/mm/yyyy-PHP

用于日期验证的正则表达式帮助-dd/mm/yyyy-PHP,php,regex,datetime,date,preg-match,Php,Regex,Datetime,Date,Preg Match,有人能告诉我这个正则表达式的错误吗: if(preg_match("/^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$/", $_POST["date"]) === 0) { echo 'error'; } 基本上,我希望每次都显示一条错误消息,除非格式正确(dd/mm/yyyy) 我在上面做了什么错事 谢谢你的指点 --发布后不久更新了上面的正则表达式-为给您带来的不便道歉--我认为您应该避开斜杠/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/您

有人能告诉我这个正则表达式的错误吗:

if(preg_match("/^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$/", $_POST["date"]) === 0) {
   echo 'error';
}
基本上,我希望每次都显示一条错误消息,除非格式正确(dd/mm/yyyy)

我在上面做了什么错事

谢谢你的指点


--发布后不久更新了上面的正则表达式-为给您带来的不便道歉--

我认为您应该避开斜杠
/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/

您需要避开斜杠,因为您使用它作为正则表达式分隔符

/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/
或者使用不同的正则表达式分隔符

#^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$#

您也可以使用此选项:

([0-2]\d|3[0-1])\/(0\d|1[0-2])\/(19|20)\d{2}

如果您想区分日期和月份,但也只验证两个世纪。

我用它来检查日期

private function validate_date( $date, $empty_allowed = true ) {

    if ( empty( $date ) ) {
        return $empty_allowed;
    }

    if ( ! strpos( $date, '/' ) ) {
        return false;
    }

    if ( substr_count( $date, '/' ) !== 2 ) {
        return false;
    }

    if ( preg_match( '/(0[1-9]|1[0-9]|3[01])\/(0[1-9]|1[012])\/(2[0-9][0-9][0-9]|1[6-9][0-9][0-9])/', $date ) !== 1 ) {
        return false;
    }

    $split = explode( '/', $date );

    return checkdate( $split[1], $split[0], $split[2] );

}

这是解决问题的最简单方法

^([0-2][0-9]|(3)[0-1])(\/)(((0)[0-9])|((1)[0-2]))(\/)\d{4}$
输出看起来像=>
2019年12月31日


太棒了。现在这一切都很好。愚蠢的我:)非常感谢。我很快就会打绿色勾:)谢谢。这对我来说也很有用。投票支持你。如果你需要捕获
^([0-2]\d|3[0-1])\/(0\d|1[0-2])\/((?:19 | 20)\d{2})$
,还添加了起始和结束锚定。还有一个错误,日期为零的日期和月份将在“00/00/1999”工作。请使用在线regexp测试仪。