代码之家  ›  专栏  ›  技术社区  ›  user1032531

使用php验证RFC3339日期时间

  •  0
  • user1032531  · 技术社区  · 7 年前

    如何验证日期时间是否有效RFC3339有何建议?我知道我可以将其转换为unix时间,然后将其格式化为有效的rfc339,但我不希望这样做,而是强制要求提供正确的格式。 http://mattallan.org/posts/rfc3339-date-time-validation/ 建议使用regex,只能作为最后的手段。谢谢

    2 回复  |  直到 7 年前
        1
  •  4
  •   msg    7 年前

    DateTime 具有预定义的 DaTeTime::RFC3339 格式化常量。自 createFromFormat 退货 false 如果它不能根据提供的格式解析日期,您可以使用该检查作为验证器:

    validRFC3339Date("2018-01-29T20:36:01Z");
    validRFC3339Date("2018-01-29T20:36:01+00:00");
    
    validRFC3339Date("2018-01-22 20:36");
    validRFC3339Date("2018-09-28T16:00:05.000Z");
    
    function validRFC3339Date($date) {
        if (DateTime::createFromFormat(DateTime::RFC3339, $date) === FALSE) {
            echo "$date: Invalid RFC3339\n";
        } else {
            echo "$date: Valid RFC3339\n";
        }
    }
    
        2
  •  2
  •   Xxmarijnw    7 年前

    如果决定使用regex,可以使用以下代码:

    preg_match('/^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([Zz])|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9]))$/', $time);
    

    如果$time与regex匹配,则返回true。

    推荐文章