为什么我的 ISO 日期不匹配模式?
给定的正则表达式:
1 | /^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/
|
登录后复制
设计以匹配“YYYY-MM-DD HH:MM:SS”格式的 ISO 样式日期。然而,尽管满足标准,它还是返回 false。问题在于包含表达式的斜杠 (/)。
PHP 正则表达式分隔符
在 PHP 中,正则表达式必须包含在分隔符内,通常是斜杠 (/ ),但也可以使用双引号 (")。 / 分隔符用于定义正则表达式的开始和结束,并防止与正则表达式中的其他特殊字符发生冲突。表达式。
解决问题
要解决问题,请确保满足以下条件:
-
正确的分隔符:使用双引号 (") 将正则表达式括起来text:
1 | if (preg_match( "/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/" , $date ) >= 1)
|
登录后复制
-
表达式中的单引号:如果需要在正则表达式中使用单引号,请使用反斜杠 () 进行转义:
1 | if (preg_match( '/^([0-9]{4})-([0-9]{2})-([0-9]{2}) \'([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/' , $date ) >= 1)
|
登录后复制
使用日期时间的替代选项类
不要使用正则表达式,请考虑使用 PHP DateTime 类,它提供更强大、更可靠的日期验证和操作功能:
1 2 3 4 5 | function validateDate( $date , $format = 'Y-m-d H:i:s' )
{
$d = DateTime::createFromFormat( $format , $date );
return $d && $d ->format( $format ) == $date ;
}
|
登录后复制
此函数返回 true有效日期,无效日期为 false。它可用于验证各种格式的日期,包括 ISO。
以上是为什么我的 PHP ISO 日期正则表达式不匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!