##解決したいこと
PHPのフォームバリデーションで生年月日が正しい形式かどうか、存在する形式かどうかバリデーションしています。
解決したいことは、
1980-06-05 だと、バリデーションに引っかかってしまう
1980-6-5 だと、バリデーションを通過する
方針としては、1980-06-05も1980-6-5も同じ日付とみなし、どちらもバリデーションを通過するようにしたいです。
##該当コード
if($_SERVER['REQUEST_METHOD'] === 'POST'){ $birth = filter_input(INPUT_POST,'birth'); 以下略 if($birth == null || $birth !== date('Y-n-j',strtotime($birth))) { $errors['birth'] = "誕生日は必須です。また、存在する年月日を入力してください。※形式に注意 例:1980-1-1"; } フォーム部分 <label for="birth" class="form-label">生年月日</label> <?php if(isset($errors['birth'])): ?> <div class="vali"><?php echo $errors['birth']; ?></div> <?php endif; ?>
##調べたこと・試したこと
・正規表現をいれる?preg-matchとか使う?
正規表現の例: /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/こんな感じで
・date('Y-n-j'→date('Y-m-d'にすると、
1980-06-07は通過するが、1980-6-6が通過しなくなる。
何かベストな方法があればご教示お願いいたします。
回答3件
あなたの回答
tips
プレビュー