【问题标题】:Best way to check dates (DateTime vs regex)检查日期的最佳方法(DateTime 与正则表达式)
【发布时间】:2014-02-04 13:03:40
【问题描述】:

目前,检查日期的最佳方法是什么?为什么?

以“现代方式”使用 DateTime?

$date="2014-02-04";
$dt = DateTime::createFromFormat("Y-m-d", $date);

return $dt !== false && !array_sum($dt->getLastErrors());

还是使用正则表达式?

$date="2014-02-04";

return (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/",$date));

你还有什么其他的cmets或者建议吗?

【问题讨论】:

  • 将日期逻辑编码成正则表达式非常麻烦,而DateTime已经为您提供了一切。
  • 请注意,检查日期的正则表达式方法比您编写的更复杂,因为您的模式也验证这种日期:2014-02-31
  • @CasimiretHippolyte 是的,我写了一个简单的例子来说明情况。

标签: php regex date datetime


【解决方案1】:

RegEx 只能检查日期字符串的正确格式。

$date="2014-02-04";

return (preg_match("/^\d{4}-\d{1,2}-\d{1,2}$/", $date));

但如果您想检查正确的日期,请使用checkdate PHP 函数

$arr = explode("-", $date);
if ( checkdate((int)$arr[1], (int)$arr[2], (int)$arr[0]) ) {
    echo "Correct date";
} else {
    echo "Incorrect date";
}

【讨论】:

    【解决方案2】:

    最好的方法是最适合您需求的方法。

    如果您认为 40 个字符长的正则表达式比可以更高效地完成相同工作且代码更易读的专用函数更好,那么请务必使用正则表达式。

    【讨论】:

      【解决方案3】:

      使用 DateTime 肯定是正确的方法。

      但如果你真的想要一个正则表达式,请查看here。

      【讨论】:

        【解决方案4】:

        使用正则表达式我们只能检查字符串的格式,但使用 DateTime 函数我们可以检查日期是否有效。所以我更喜欢使用 Datetime 函数来查看日期。

        【讨论】:

          【解决方案5】:

          绝对是第一种方式。

          不要使用正则表达式来解析日期或 HTML。


          一些基本原因:

          • 正则表达式在用于非平凡模式时非常慢。
          • 如果 PHP 上有现成的定制 function or classes,请尽量避免使用正则表达式。

          【讨论】:

          • 我同意,但没有完整的答案
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多