Laravel日期验证无法要求4位数字的年份

Dspitzle

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

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

我发现的是,如果有人输入10/12/13,它将通过验证并存储为10/12/0013。显然,这不好。有没有办法使验证要求四位数的年份?我认为这就是格式中的Y所要做的。

Quasdunk

发表我的评论作为答案

注意:这与这个问题和那里的一般讨论有关。解决方法已发布在上述问题的答案中。此注释中提到了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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

POI DataFormatter返回2位数字的年份,而不是日期单元格的4位数字的年份

Delphi需要4位数字的年份

用Java的simpledateformat强制4位数字的年份

Laravel字段验证:允许8位或16位数字

从日期时间对象中提取两位而不是四位数字年份

同步SMS验证的6位数字(而不是4位数字)

cfSpreadsheet 2位数字的年份

无法将16位数字转换为可读日期

Angular Reactive Forms验证日期年份四位数

日期时间格式年份的最后一位数字

Oracle 10g在日期中接受5位数字的年份

R将日期转换为错误的格式(将年份转换为5位数字)

如何标准化日期年份,即从2位数转换为4位数Javascript

.NET DateTime ToString Culture en-US在某些框中输出4位数字的年份,而在其他框中输出2位数字的年份

基于语言环境的SimpleDateFormat模式,但强制使用4位数字的年份

正则表达式以匹配孤立的4位数字年份

Ruby Date.strptime不强制使用4位数字的年份

将年份值限制为仅4位数字长

要求UITextField取5位数字

要求输入10位数字

分割4位数字

解密4位数字

moment.js 2位数的年份转换了错误的4位数的年份

将2位数的年份转换为4位数的年份

尝试使用可变的朱利安日期和年份的最后一位数字重命名文件

将世纪添加到2位数字年份

用2位数的年份解析日期

使用正则表达式重命名批处理文件以匹配4位数字的年份

Laravel:重置密码无需验证即可获得6位数字