当涉及到这个正则表达式时,有人能告诉我我的错误吗:
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
测试演示