0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHP でinputタグで代入された値をdate型か判定する関数(配列と変数それぞれ判定可)

Posted at

PHPを扱う人なら誰もが扱ったでことがあるであると思うformタグのnameの値を$_POST型で受け取り値を反映するサイト。そのようなサイト制作に取り組んでいて、受け取る値(変数・配列)がdate型に当てはまるか判定したいときに使える関数を製作いたしました。

まだ不完全な部分もありますがデータベースと連携することでこの関数はdate型のフォーマットに当てはまるか判定できます。

配列をそれぞれdate型か判定する関数

test.php
$date_array=["2020-02-14","2019/01/15","1990516",//正しい日付として出力
    "2010/8/17","2022020180","2005/09-32","xxxx-yy-zz",//エラー
    "0000-00-00","9999-99-99" //極端な数字でも出力→しかもdateの限界か出力される値がおかしい。
    ];
check_array($date_array);

function check_array($date_array) {
  $pattern="#^\d{4}([/-]?)\d{2}\\1\d{2}$#";
  foreach ($date_array as $judged_date){
    if(preg_match($pattern,$judged_date,$match)){
      print date("Y-m-d",strtotime($judged_date));
      print 'は正しい日付である<br>';
    }else{
      print $judged_date."は日付ではありません<br>";
    }
  }

結果

2020-02-14は正しい日付である
2019-01-15は正しい日付である
1990516は日付ではありません 
2010/8/17は日付ではありません <!-- エラー -->
2022020180は日付ではありません
2005/09-32は日付ではありません
xxxx-yy-zzは日付ではありません
-0001-11-30は正しい日付である <!-- 極端な数字でも出力 -->
1970-01-01は正しい日付である

解説

流れとしては対象の配列を変数$judged_dateとして出力し、その変数をpreg_match$patternに当てはまるものならdatestrottimeで日付のフォーマットとして返すという処理を行っています。

変数をdate型か判定する関数

test.php

    $date = "2022-06-24";
check_param($date);
function check_param($date) {
  $pattern="#^\d{4}([/-]?)\d{2}\\1\d{2}$#";
    if(preg_match($pattern,$date,$match)){
      print date("Y-m-d",strtotime($date));
      print 'は正しい日付である';
    }else{
      print "は日付ではありません";
    }
}

結果

2022-06-24は正しい日付である

解説

配列を判定した関数の引数を変数に変換しただけのものでございます。そのため、上記の配列判定の関数が理解できれば理解できると思います!

まとめ

配列判定の関数で示したようにまだ不完全なものではあります。

データベースと連携することでこの関数はdate型か判定できます。

しかし、このように述べたように対象の文字列をdate型のフォーマットに当てはまるかどうか判定する時には利用しがいがあるのではないかなと思います。
(どちらにしろDBがdate型じゃないとDBに保存できず、invalid datetime formatのエラーを返すからあまり意味がないのでは??という意見は心にしまっておいてくださいmm)

この記事がみなさんの参考になれば幸いです。改善案等もあればよろしくお願いいたします🙇‍♂️

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?