使用 php 验证 RFC3339 日期时间
Validate RFC3339 date-time using php
关于如何验证日期时间是否有效 RFC3339 有什么建议吗?我知道我可以将它转换为 unix 时间,然后将其格式化为有效的 RFC3339,但我不想这样做,而是强制提供正确的格式。 http://mattallan.org/posts/rfc3339-date-time-validation/ 建议使用正则表达式,仅作为最后的手段。谢谢
如果您决定使用正则表达式,可以使用以下代码:
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 与正则表达式匹配,这将 return 为真。
DateTime
有一个预定义的 DaTeTime::RFC3339
格式常量。由于 createFromFormat
returns 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";
}
}
关于如何验证日期时间是否有效 RFC3339 有什么建议吗?我知道我可以将它转换为 unix 时间,然后将其格式化为有效的 RFC3339,但我不想这样做,而是强制提供正确的格式。 http://mattallan.org/posts/rfc3339-date-time-validation/ 建议使用正则表达式,仅作为最后的手段。谢谢
如果您决定使用正则表达式,可以使用以下代码:
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 与正则表达式匹配,这将 return 为真。
DateTime
有一个预定义的 DaTeTime::RFC3339
格式常量。由于 createFromFormat
returns 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";
}
}