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


Regular Expression Help for Date Validation - dd/mm/yyyy - PHP

当涉及到这个正则表达式时,有人能告诉我我的错误吗:

if(preg_match("/^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$/", $_POST["date"]) === 0) {
   echo 'error';
}

基本上,我希望每次都显示一条错误消息——除非格式正确(dd/mm/yyyy)。

我做错了什么?

非常感谢你的指点。

-发布后不久更新了上面的regex-对给您带来的不便深表歉意

我认为您应该避开斜线/^[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}$

输出看起来像=>31/12/2019

测试演示