クレジットカードの月の検証ルールを作成しようとしていますが、これにはRespect Validationライブラリを使用しています。
v::string()->date('m')->validate('02');
結果は「02」が有効な月だからFALSE
そうなるに違いないTRUE
クレジットカードの月の検証ルールを作成しようとしていますが、これにはRespect Validationライブラリを使用しています。
v::string()->date('m')->validate('02');
結果は「02」が有効な月だからFALSE
そうなるに違いないTRUE
編集:問題が見つかりました。2 月は 28 日しかないため、このライブラリでは日がないと日付を確認できません (現在は月の 30 日なので、比較すると 02 ではなく 03 が返されます)。
解決策:
v::int()->between(1, 12)->validate(02);
また
初日を比較に追加できます。
$value = '01-'.$input;
v::string()->date('d-m')->validate($value);
問題は、Validation が を使用してこの検証を行っていたことDateTime::createFromFormat()
です。
PHPマニュアルには次のように書かれています:
format
文字が含まれていない場合! フォーマットで指定されていない生成された時間の部分は、現在のシステム時間に設定されます。
そのため、問題を回避するために修正が行われdate_parse_from_format()
、代わりにValidation が使用されるようになりました。
このエラーは 2016 年 3 月 31 日に修正され (バージョン 0.8.14、0.9.8、および 1.0.5)、1.1 でも利用できます。
ライブラリのバージョンをアップグレードすることを検討してください。