preg_matchによる所定の書式の文字の確認

ちょっとした正規表現

以前、正規表現による値が数値かどうかを確認する記事を書いたが、
PHPで日付データを確認する方法をメモしておく。

nishiru3.hatenablog.com

ソース

まだ十分ではないが、書式についてはチェックできる。ただし、2018/33/33とかにもマッチしてしまうので、
その部分は修正が必要。

<?php
/**
 * preg_matchによる日付のチェック
 * 「2018/12/12 00:00:00」
 * $patternで正規表現のパターンを設定
 * 「^」、「$」は最初と最後を固定
 *  \d{4} 西暦の4文字
 *  ([/-]?) 次の月の区切りとして/もしくは-。ただしなくてもよい。
 *  \d{1,2} 月の1文字もしくは2文字。
 *  ([/-]?) 次の日の区切りとして/もしくは-。ただしなくてもよい。
 *  ¥d{1,2} 日の1文字もしくは2文字
 *  \s スペース
 *  \d{2}:\d{2}:\d{2} 00:00:00にマッチ。上位の桁の場合も2文字でないとマッチしない。
 */
$pattern="#^\d{4}([/-]?)\d{1,2}([/-]?)\d{1,2}\s\d{2}:\d{2}:\d{2}$#";

$str_time='2018/12/22 00:00:00';
if(preg_match($pattern,$str_time,$match)){
    print $str_time."は正しい書式です。"."<br>";
}else{
    print $str_time."は正しくない書式です。"."<br>";
}