質問するログイン新規登録

Q&A

解決済

3回答

3156閲覧

生年月日のバリデーションを通過させたい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2021/03/13 16:40

編集2021/03/13 16:55

0

0

##解決したいこと
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が通過しなくなる。

何かベストな方法があればご教示お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答3

0

PHP

1<?php 2$birth='1980-06-05'; 3 4$birth=preg_replace('/-0/','-',$birth); 5if($birth == null || $birth !== date('Y-n-j',strtotime($birth))) { 6 echo "誕生日は必須です。また、存在する年月日を入力してください。※形式に注意 例:1980-1-1"; 7} 8?>

とか

投稿2021/03/13 17:14

modieu

総合スコア282

0

ベストアンサー

-0を削除してから、今のチェックを行う。

投稿2021/03/13 17:03

otn

総合スコア86597

otn

2021/03/13 17:26

あ、「-0 の 0 を削除」でした。
guest

0

checkdate

checkdate — グレゴリオ暦の日付/時刻の妥当性を確認します

https://www.php.net/manual/ja/function.checkdate.php

投稿2021/03/13 17:18

phper.k

総合スコア3923

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問