【问题标题】:Month validation with "Respect Validation"使用“尊重验证”进行月份验证
【发布时间】:2015-06-03 12:17:48
【问题描述】:

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

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

结果是FALSE,但它必须是TRUE,因为“02”是有效月份

【问题讨论】:

  • 如果它适用于纯整数,也许你可以转换 '02' 字符串?

标签: php validation credit-card respect-validation


【解决方案1】:

问题在于 Validation 正在使用 DateTime::createFromFormat() 进行此验证。

PHP manual 说:

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

因此,为避免出现问题,a fix has been made 和验证现在使用 date_parse_from_format() 代替。

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

您可以考虑升级您的库版本。

【讨论】:

    【解决方案2】:

    您需要将format 指定为!mAs noted on PHP manual,如果省略日期格式的其他部分,则使用当前时间。使用 ! 将时间重置为 UNIX 纪元。

    another answer here 对此进行了解释。

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

    【讨论】:

      【解决方案3】:

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

      解决方案:

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

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

      $value = '01-'.$input;    
      v::string()->date('d-m')->validate($value);
      

      【讨论】:

      • 不,它不能解决问题。此行日期('m')中的问题
      • 这个怎么样:v::date('m')->notEmpty()->digit()->validate('02');
      • v::date('m')->notEmpty()->digit()->validate('02');假
      猜你喜欢
      • 2017-03-23
      • 1970-01-01
      • 2021-02-08
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2015-09-23
      相关资源
      最近更新 更多