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

时间:2012-02-15 12:34:40

标签: 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)。

我上面做错了什么?

非常感谢任何指示。

- 发布后不久就更新了正则表达式 - 为不方便道歉 -

5 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:4)

您需要转义斜杠,因为您将其用作正则表达式分隔符

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

或使用不同的正则表达式分隔符

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

答案 2 :(得分:4)

你也可以使用这个:

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

如果你想区分日期和月份,但也只需要验证2个世纪。

答案 3 :(得分: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] );

}

答案 4 :(得分:0)

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

^([0-2][0-9]|(3)[0-1])(\/)(((0)[0-9])|((1)[0-2]))(\/)\d{4}$

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

Test Demo