我对Laravel日期验证所得到的结果感到困惑。有问题的规则是:
'date_of_birth'=>array('required', 'date_format:n/j/Y')
我发现的是,如果有人输入10/12/13,它将通过验证并存储为10/12/0013。显然,这不好。有没有办法使验证要求四位数的年份?我认为这就是格式中的Y所要做的。
发表我的评论作为答案
注意:这与这个问题和那里的一般讨论有关。解决方法已发布在上述问题的答案中。此注释中提到了PHP错误。因此,我不相信这种解决方案。
答案:这似乎是PHP函数date_parse_from_format()中的错误。您可以通过使用正则表达式指定更严格的规则来解决此问题:
array('required', 'date_format:n/j/Y', 'regex:/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/')
如果您不熟悉正则表达式,乍一看可能会很复杂,但是如果您将其分解,它只是说:
[0-9]{2}
=必须有2个后续数字,每个数字在0到9之间。
[0-9]{4}
=必须有4个后续数字,每个数字在0到9之间。
\/
=必须有一个斜线。它被反斜杠转义了。
但是:就我个人而言,我不太喜欢这种解决方案。即使可以确保以四位数表示的年份,“ 99/99/9999”之类的日期仍会过去。
这是不是与你的情况after:01-01-1900
的解决方法。因此,即使未按预期使用它,我仍然会同意
'date_of_birth'=>array('required', 'date_format:"n/j/Y"', 'after:01-01-1900')
(或者稍微调整一下正则表达式...)。
要记住的一件事:它可以工作,但是我不确定为什么。after-filter上的基础PHP函数是DateTime :: createFromFormat()。
DateTime::createFromFormat('n/j/Y', '99/99/9999');
给我一个日期“ 10007-06-07”,该日期实际上应该在“ 01-01-1900”之后,但是验证器失败-可能是由于两个日期的比较,可能是因为值无效。而且我不知道它是如何计算的。这有点不可预测的行为,请谨慎处理:)
如果它是愚蠢的,但是有效,那不是愚蠢的。- 墨菲定律
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句