PHPでウェブの世界と繋がろう!
menu
ホーム > PHPサンプル > 正規表現系 > 日付を判別したい

日付を判別したい

Pocket

サンプルコード sample code
正規表現 日付 の書式の判別 「preg_match()」
数値や論理値 = preg_match (パターン文字列, 入力文字列)

パターン文字列は、検索するパターンを表現する文字列です。入力文字列は検索する対象の文字列です。検索に一致すると数値の 1 を返し、一致しなかった場合 0 を返し、エラーが発生した場合は、 論理値 FALSE を返します。

日付の書式が正しいかどうか判別する正規表現

書式:2012/1/1
「数値4桁」/「数値1~2桁」/「数値1~2桁」の書式を判別しています。

//書式:2012/1/1
if(preg_match('/^([1-9][0-9]{3})\/([1-9]{1}|1[0-2]{1})\/([1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1})$/', $date))
    {echo '<font color="blue">'.$date.' 正しい日付</font><br/>';}
else
    {echo '<font color="red">'.$date.' 不正な日付</font><br/>';}

書式:2012/01/01
「数値4桁」/「数値2桁」/「数値2桁」の書式を判別しています。

//書式:2012/01/01
if(preg_match('/^([1-9][0-9]{3})\/(0[1-9]{1}|1[0-2]{1})\/(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]{1})$/', $date))
    {echo '<font color="blue">'.$date.' 正しい日付</font><br/>';}
else
    {echo '<font color="red">'.$date.' 不正な日付</font><br/>';}

日付が本当に正しいかどうか判別するには checkdate() を使用します。こちらを参照下さい。

サンプルコード

– サンプル Click Here ! –

<h3>正規表現 日付の書式の判別 書式 2012/1/1</h3>
<?php
function yyyymd($date){
    //書式
        //2012/1/1
    //年
        //4桁整数     1000-9999
    //月
        //1桁の場合は 1-9
        //2桁の場合は 10の位が1  1の位が0-2
    //日
        //1桁の場合は 1~9
        //2桁の場合は 10の位が1と2  1の位が0-9
        //2桁の場合は 10の位が3     1の位が0が1

    if(preg_match('/^(&#91;1-9&#93;&#91;0-9&#93;{3})\/(&#91;1-9&#93;{1}|1&#91;0-2&#93;{1})\/(&#91;1-9&#93;{1}|&#91;1-2&#93;{1}&#91;0-9&#93;{1}|3&#91;0-1&#93;{1})$/', $date))
        {echo '<font color="blue">'.$date.' 正しい日付</font><br/>';}
    else
        {echo '<font color="red">'.$date.' 不正な日付</font><br/>';}
}

echo '<h4>年が不正</h4>';
yyyymd('/1/1');
yyyymd('0/1/1');
yyyymd('1/1/1');
yyyymd('10/1/1');
yyyymd('100/1/1');
yyyymd('20a1/1/1');
yyyymd('0100/1/1');
yyyymd('20121/1/1');

echo '<h4>月が不正</h4>';
yyyymd('2012//1');
yyyymd('2012/0/1');
yyyymd('2012/13/1');
yyyymd('2012/100/1');
yyyymd('2012/1a/1');
yyyymd('2012/01/1');

echo '<h4>日が不正</h4>';
yyyymd('2012/1/');
yyyymd('2012/1/0');
yyyymd('2012/1/01');
yyyymd('2012/1/32');
yyyymd('2012/1/1a');
yyyymd('2012/1/100');

echo '<h4>1000日チェック</h4>';
for($i = 0; $i <= 1000; $i++){
    $date = date('Y/n/j',mktime(0,0,0,date('n'),date('j')+$i,date('Y')-1));
    yyyymd($date);
}
?>

<h3>正規表現 日付の書式の判別 書式 2012/01/01</h3>
<?php
function yyyymmdd($date){
    //書式
        //2012/1/1
    //年
        //4桁整数     1000-9999
    //月
        //1桁の場合は 01-09
        //2桁の場合は 10の位が1  1の位が0-2
    //日
        //1桁の場合は 01~09
        //2桁の場合は 10の位が1と2  1の位が0-9
        //2桁の場合は 10の位が3     1の位が0が1

    if(preg_match('/^(&#91;1-9&#93;&#91;0-9&#93;{3})\/(0&#91;1-9&#93;{1}|1&#91;0-2&#93;{1})\/(0&#91;1-9&#93;{1}|&#91;1-2&#93;{1}&#91;0-9&#93;{1}|3&#91;0-1&#93;{1})$/', $date))
        {echo '<font color="blue">'.$date.' 正しい日付</font><br/>';}
    else
        {echo '<font color="red">'.$date.' 不正な日付</font><br/>';}
}

echo '<h4>年が不正</h4>';
yyyymmdd('/1/1');
yyyymmdd('0/1/1');
yyyymmdd('1/1/1');
yyyymmdd('10/1/1');
yyyymmdd('100/1/1');
yyyymmdd('20a1/1/1');
yyyymmdd('0100/1/1');
yyyymmdd('20121/1/1');

echo '<h4>月が不正</h4>';
yyyymmdd('2012//1');
yyyymmdd('2012/0/1');
yyyymmdd('2012/13/1');
yyyymmdd('2012/100/1');
yyyymmdd('2012/1a/1');
yyyymmdd('2012/01/1');

echo '<h4>日が不正</h4>';
yyyymmdd('2012/1/');
yyyymmdd('2012/1/0');
yyyymmdd('2012/1/01');
yyyymmdd('2012/1/32');
yyyymmdd('2012/1/1a');
yyyymmdd('2012/1/100');

echo '<h4>1000日チェック</h4>';
for($i = 0; $i <= 1000; $i++){
    $date = date('Y/m/d',mktime(0,0,0,date('n'),date('j')+$i,date('Y')-1));
    yyyymmdd($date);
}
?>
実行結果
正規表現 日付の書式の判別 書式 2012/1/1

年が不正
/1/1 不正な日付
0/1/1 不正な日付
1/1/1 不正な日付
10/1/1 不正な日付
100/1/1 不正な日付
20a1/1/1 不正な日付
0100/1/1 不正な日付
20121/1/1 不正な日付

月が不正
2012//1 不正な日付
2012/0/1 不正な日付
2012/13/1 不正な日付
2012/100/1 不正な日付
2012/1a/1 不正な日付
2012/01/1 不正な日付

日が不正
2012/1/ 不正な日付
2012/1/0 不正な日付
2012/1/01 不正な日付
2012/1/32 不正な日付
2012/1/1a 不正な日付
2012/1/100 不正な日付

1000日チェック
・・・・
・・

– サンプル Click Here ! –


タグ(=記事関連ワード)

タグ: , ,

日付

投稿日:2012年3月14日
最終更新日:2014年02月20日

関連記事

このカテゴリの他のページ

この記事へのコメント

トラックバックurl

http://www.tryphp.net/phpsample-preg-date/trackback/