gpt4 book ai didi

validation - Laravel 日期验证不需要 4 位数字年份

转载 作者:行者123 更新时间:2023-12-01 03:46:28 31 4
gpt4 key购买 nike

我对从 Laravel 日期验证中得到的结果感到有些困惑。有问题的规则是:

'date_of_birth'=>array('required', 'date_format:n/j/Y')

我发现如果有人输入 10/12/13,它通过验证,并被存储为 10/12/0013。显然,这并不好。有什么方法可以验证要求四位数的年份吗?我认为这就是格式中的 Y 会做的事情。

最佳答案

发表我的评论作为答案

注:这与this question有关以及那里的一般性讨论。解决方法发布在 this answer关于上述问题。 PHP 错误在 this comment 中提到.所以我不相信这个解决方案。

答案:这似乎是 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')

(或者可能稍微调整正则表达式......)。

要记住的一件事:它有效,但我不太确定为什么。后置过滤器的底层 PHP 函数是 DateTime::createFromFormat() .
DateTime::createFromFormat('n/j/Y', '99/99/9999');

给了我一个“10007-06-07”的日期,它实际上应该在“01-01-1900”之后,但验证器失败了——可能是因为两个日期的比较,也可能是因为值无效。而且我不知道它是如何计算的。这是有些不可预测的行为,因此请谨慎处理:)

如果它是愚蠢的,但它有效,那它就不是愚蠢的。 - 墨菲定律

关于validation - Laravel 日期验证不需要 4 位数字年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26554119/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com