PHP Regex to check date is in YYYY-MM-DD format

前端 未结 23 1488
终归单人心
终归单人心 2020-11-27 10:05

I\'m trying to check that dates entered by end users are in the YYYY-MM-DD. Regex has never been my strong point, I keep getting a false return value for the preg_match() I

23条回答
  •  -上瘾入骨i
    2020-11-27 10:25

    Probably useful to someone:

    $patterns = array(
                'Y'           =>'/^[0-9]{4}$/',
                'Y-m'         =>'/^[0-9]{4}(-|\/)([1-9]|0[1-9]|1[0-2])$/',
                'Y-m-d'       =>'/^[0-9]{4}(-|\/)([1-9]|0[1-9]|1[0-2])(-|\/)([1-9]|0[1-9]|[1-2][0-9]|3[0-1])$/',
                'Y-m-d H'     =>'/^[0-9]{4}(-|\/)([1-9]|0[1-9]|1[0-2])(-|\/)([1-9]|0[1-9]|[1-2][0-9]|3[0-1])\s(0|[0-1][0-9]|2[0-4])$/',
                'Y-m-d H:i'   =>'/^[0-9]{4}(-|\/)([1-9]|0[1-9]|1[0-2])(-|\/)([1-9]|0[1-9]|[1-2][0-9]|3[0-1])\s(0|[0-1][0-9]|2[0-4]):?(0|[0-5][0-9]|60)$/',
                'Y-m-d H:i:s' =>'/^[0-9]{4}(-|\/)([1-9]|0[1-9]|1[0-2])(-|\/)([1-9]|0[1-9]|[1-2][0-9]|3[0-1])\s(0|[0-1][0-9]|2[0-4]):?((0|[0-5][0-9]):?(0|[0-5][0-9])|6000|60:00)$/',
            );
    echo preg_match($patterns['Y'], '1996'); // true
    echo preg_match($patterns['Y'], '19966'); // false
    echo preg_match($patterns['Y'], '199z'); // false
    echo preg_match($patterns['Y-m'], '1996-0'); // false
    echo preg_match($patterns['Y-m'], '1996-09'); // true
    echo preg_match($patterns['Y-m'], '1996-1'); // true
    echo preg_match($patterns['Y-m'], '1996/1'); // true
    echo preg_match($patterns['Y-m'], '1996/12'); // true
    echo preg_match($patterns['Y-m'], '1996/13'); // false
    echo preg_match($patterns['Y-m-d'], '1996-11-1'); // true
    echo preg_match($patterns['Y-m-d'], '1996-11-0'); // false
    echo preg_match($patterns['Y-m-d'], '1996-11-32'); // false
    echo preg_match($patterns['Y-m-d H'], '1996-11-31 0'); // true
    echo preg_match($patterns['Y-m-d H'], '1996-11-31 00'); // true
    echo preg_match($patterns['Y-m-d H'], '1996-11-31 24'); // true
    echo preg_match($patterns['Y-m-d H'], '1996-11-31 25'); // false
    echo preg_match($patterns['Y-m-d H:i'], '1996-11-31 2400'); // true
    echo preg_match($patterns['Y-m-d H:i'], '1996-11-31 24:00'); // true
    echo preg_match($patterns['Y-m-d H:i'], '1996-11-31 24:59'); // true
    echo preg_match($patterns['Y-m-d H:i'], '1996-11-31 24:60'); // true
    echo preg_match($patterns['Y-m-d H:i'], '1996-11-31 24:61'); // false
    echo preg_match($patterns['Y-m-d H:i'], '1996-11-31 24:61'); // false
    echo preg_match($patterns['Y-m-d H:i:s'], '1996-11-31 24:6000'); // true
    echo preg_match($patterns['Y-m-d H:i:s'], '1996-11-31 24:60:00'); // true
    echo preg_match($patterns['Y-m-d H:i:s'], '1996-11-31 24:59:59'); // true
    echo preg_match($patterns['Y-m-d H:i:s'], '1996-11-31 24:59:60'); // false
    echo preg_match($patterns['Y-m-d H:i:s'], '1996-11-31 24:60:01'); // false
    

提交回复
热议问题