- ベストアンサー
phpで日付チェックをしたいのですが。
日付に使う数値がどうかチェックする処理をしたいのですが、 数値と/かどうかチェックする処理を以下の様に作ったのですが、 上手くいきません。 ご教授お願いします。 if (preg_match("/^[0-9/]+$/",$str)) { return true; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問された事にだけに答えると、真ん中のスラッシュはエスケープさせないといけません。多分。 $pattern = "/^([0-9\/])+$/";
その他の回答 (3)
- bm_hiro
- ベストアンサー率51% (200/388)
個人的には >>1さんの方法がスマートかな~と思うのですが、この関数は注意点があります。 区切り文字にスラッシュを使うなら、西暦は4桁で指定してください。 日本人なら「年/月/日」が当たり前だと思うのですが、年を2桁で指定すると、「月/日/年」とアメリカ式な解釈されてしまう場合があります。 区切り文字がハイフンだと2桁でも大丈夫だという謎仕様。 同じ日付を指定したつもりでも、別の日付にパースしてくれます。 <?php print_r(date_parse(date("y/m/d"))); // NG print_r(date_parse(date("y-m-d"))); print_r(date_parse(date("Y/m/d"))); print_r(date_parse(date("Y-m-d"))); ?> ちなみに、そちらが正規表現でやろうとしたであろう事は、「入力された文字が0~9とスラッシュならOK」と言うだけなので、日付の正当性のチェックには使えませんのでご注意ください。
正規表現を使用することにこだわらないのであれば、『 date_create_from_format 関数を使って日付に変換してみて、失敗したら日付じゃない 』 としたほうが簡単そうな気がしますが、どうでしょう? http://php.net/manual/ja/datetime.createfromformat.php $originalDate = '2011/01/13'; $timeStamp = date_create_from_format('Y/m/d', $originalDate); if ($timeStamp != false) { return true; } ※注:date_create_from_format 関数は PHP 5.3.0 以降でしか使えません。 それ以前のバージョンをお使いの場合は他の手立てを考えなくてはなりません。
お礼
回答ありがとうございます。 日付は、YYYYやYYYY/MMの場合があるのですが・・
- yuu_x
- ベストアンサー率52% (106/202)
return ($d = date_parse($str)) && checkdate($d['month'], $d['day'], $d['year']);
お礼
ありがとうございます。 回答を参考に無事解決しました。 回答してくださった方々に感謝です。