为什么我的 ISO 日期模式匹配失败?
由于缺少前向,您提供的正则表达式无法正确匹配 ISO 样式日期模式开头和结尾处有斜杠(“/”)。这些分隔符在 PHP 的正则表达式语法中至关重要。更正后的模式应为:
/^(?P<year>[0-9]{4})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2}) (?P<hour>[1-2]{1}\d{1}):(?P<min>[0-5]{1}\d{1}):(?P<sec>[0-5]{1}\d{1})$/
此模式定义了年、月、日、小时、分钟和秒的六个捕获组。
替代方法:使用 DateTime Class
虽然可以选择使用正则表达式,但更优雅的解决方案是使用 PHP 的 DateTime class:
function validateDate($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; }
此函数接受日期字符串和可选格式。它使用 createFromFormat 方法创建一个 DateTime 对象,并检查生成的对象是否有效并与原始日期匹配。
validateDate 函数提供了一种更强大、更通用的方法来验证日期。它支持多种格式,并且可以验证不同粒度级别的日期。
以上是为什么我的 PHP ISO 日期正则表达式失败,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!