1

我正在尝试为信用卡月份编写验证规则,为此我正在使用Respect Validation库。

v::string()->date('m')->validate('02');

结果是FALSE,但一定是TRUE因为“02”是有效月份

4

3 回答 3

1

编辑:好的,我发现了问题。因为二月只有 28 天,所以您无法在没有一天的情况下使用此库验证日期(现在是一个月的第 30 天,因此它返回 03 而不是 02 比较)。

解决方案:

v::int()->between(1, 12)->validate(02);

或者

您可以添加第一天进行比较。

$value = '01-'.$input;    
v::string()->date('d-m')->validate($value);
于 2015-03-30T13:08:39.213 回答
0

您需要指定formatas !m如 PHP 手册中所述,如果省略日期格式的其他部分,则使用当前时间。使用!将时间重置为 UNIX 纪元。

这在此处的另一个答案中得到了解释。

PS:我们将尝试在库本身上解决这个问题。

于 2016-04-26T23:24:02.460 回答
0

问题是 Validation 正在使用DateTime::createFromFormat().

PHP手册说:

如果format不包含字符那么生成的时间中未指定格式的部分将设置为当前系统时间。

因此,为避免出现问题,已经进行了修复,现在正在使用验证date_parse_from_format()

此错误已于 2016 年 3 月 31 日修复(版本 0.8.14、0.9.8 和 1.0.5),并且它也适用于 1.1。

您可能会考虑升级您的库版本。

于 2016-05-05T10:52:04.123 回答