Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在尝试为信用卡月份编写验证规则,为此我正在使用Respect Validation库。
v::string()->date('m')->validate('02');
结果是FALSE,但一定是TRUE因为“02”是有效月份
FALSE
TRUE
编辑:好的,我发现了问题。因为二月只有 28 天,所以您无法在没有一天的情况下使用此库验证日期(现在是一个月的第 30 天,因此它返回 03 而不是 02 比较)。
解决方案:
v::int()->between(1, 12)->validate(02);
或者
您可以添加第一天进行比较。
$value = '01-'.$input; v::string()->date('d-m')->validate($value);
您需要指定formatas !m。如 PHP 手册中所述,如果省略日期格式的其他部分,则使用当前时间。使用!将时间重置为 UNIX 纪元。
format
!m
!
这在此处的另一个答案中得到了解释。
PS:我们将尝试在库本身上解决这个问题。
问题是 Validation 正在使用DateTime::createFromFormat().
DateTime::createFromFormat()
PHP手册说:
如果format不包含字符!那么生成的时间中未指定格式的部分将设置为当前系统时间。
因此,为避免出现问题,已经进行了修复,现在正在使用验证date_parse_from_format()。
date_parse_from_format()
此错误已于 2016 年 3 月 31 日修复(版本 0.8.14、0.9.8 和 1.0.5),并且它也适用于 1.1。
您可能会考虑升级您的库版本。