【发布时间】:2014-07-10 23:52:05
【问题描述】:
我将如何验证日期是 ISO8601,特别是 RFC3339?我需要编写一些自定义正则表达式来执行此操作吗?
【问题讨论】:
标签: validation symfony iso8601
我将如何验证日期是 ISO8601,特别是 RFC3339?我需要编写一些自定义正则表达式来执行此操作吗?
【问题讨论】:
标签: validation symfony iso8601
【讨论】:
事实上,除了建议的正则表达式,我知道的唯一方法是添加自己的回调验证器:
->add('occured_at', 'text', [
'constraints' => [
new Assert\NotBlank,
new ASsert\Callback(function($date, $context) {
if (false === \DateTime::createFromFormat(\DateTime::ISO8601, $date)) {
$context->addViolation("$date is not at ISO8601 format.");
}
})
],
])
【讨论】:
\DateTime::createFromFormat(\DateTime::ISO8601, $date) 并不总是正确的参见。 stackoverflow.com/a/21260686/377645
仅适用于 SYMFONY 3.1
你可以使用
@Assert\DateTime(format="Y-m-d\TH:i:sO")
见:http://symfony.com/doc/current/reference/constraints/DateTime.html
ISO8601 格式 "Y-m-d\TH:i:sO" ;
http://php.net/manual/en/class.datetime.php
编辑 1:
您可以直接使用格式“c”,ISO 8601格式的快捷方式
(ISO 8601 日期(在 PHP 5 中添加):http://php.net/manual/en/function.date.php)
【讨论】: