首页 >后端开发 >php教程 >为什么我的 PHP ISO 日期正则表达式不匹配?

为什么我的 PHP ISO 日期正则表达式不匹配?

DDD
DDD原创
2024-12-13 05:39:08617浏览

Why Isn't My PHP ISO Date Regular Expression Matching?

为什么我的 ISO 日期不匹配模式?

给定的正则表达式:

/^([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 中,正则表达式必须包含在分隔符内,通常是斜杠 (/ ),但也可以使用双引号 (")。 / 分隔符用于定义正则表达式的开始和结束,并防止与正则表达式中的其他特殊字符发生冲突。表达式。

解决问题

要解决问题,请确保满足以下条件:

  1. 正确的分隔符:使用双引号 (") 将正则表达式括起来text:
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 类,它提供更强大、更可靠的日期验证和操作功能:

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn