重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

日付に使う数値がどうかチェックする処理をしたいのですが、
数値と/かどうかチェックする処理を以下の様に作ったのですが、
上手くいきません。
ご教授お願いします。

if (preg_match("/^[0-9/]+$/",$str)) {
 return true;
}

A 回答 (4件)

質問された事にだけに答えると、真ん中のスラッシュはエスケープさせないといけません。

多分。

$pattern = "/^([0-9\/])+$/";
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/14 19:02

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

正規表現を使用することにこだわらないのであれば、『 date_create_from_format 関数を使って日付に変換してみて、失敗したら日付じゃない 』 としたほうが簡単そうな気がしますが、どうでしょう?



http://php.net/manual/ja/datetime.createfromform …

$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 以降でしか使えません。
 それ以前のバージョンをお使いの場合は他の手立てを考えなくてはなりません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/01/13 17:02

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!