• ベストアンサー

phpで日付チェックをしたいのですが。

日付に使う数値がどうかチェックする処理をしたいのですが、 数値と/かどうかチェックする処理を以下の様に作ったのですが、 上手くいきません。 ご教授お願いします。 if (preg_match("/^[0-9/]+$/",$str)) {  return true; }

質問者が選んだベストアンサー

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.4

質問された事にだけに答えると、真ん中のスラッシュはエスケープさせないといけません。多分。 $pattern = "/^([0-9\/])+$/";

junction_7_7
質問者

お礼

ありがとうございます。 回答を参考に無事解決しました。 回答してくださった方々に感謝です。

その他の回答 (3)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

個人的には >>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」と言うだけなので、日付の正当性のチェックには使えませんのでご注意ください。

noname#212058
noname#212058
回答No.2

正規表現を使用することにこだわらないのであれば、『 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 以降でしか使えません。  それ以前のバージョンをお使いの場合は他の手立てを考えなくてはなりません。

junction_7_7
質問者

お礼

回答ありがとうございます。 日付は、YYYYやYYYY/MMの場合があるのですが・・

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

return ($d = date_parse($str)) && checkdate($d['month'], $d['day'], $d['year']);

関連するQ&A