• ベストアンサー

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

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

  • PHP
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • PHPでメールチェックをしたいのですが、空欄だとエラーが返されてしまいます。

    必須項目ではないので、何か入力されたときのみメールチェックをしたいのですが、 function isMailError ( $mail ) { if($mail==null) { return true; } if ( !preg_match( '/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mail ) ){ return true; } else { return false; } } この設定ではうまくいきません。なぜでしょうか? ご指導よろしくお願い致します。

    • 締切済み
    • PHP
  • PHPフォームでのメールチェックの仕方(必須項目でない場合)

    PHPでフォームを製作しています。 メールチェックの設定をいれるとメールの項目に入力しないとエラーが返されてしまいます。 メールの項目は必須項目でなく、 その項目に何か入力された場合のみメールチェックを行う設定にしたいのですが、 どのように行えばいいかわかりません。 ↓現在この設定を入れています。 アドバイスをお願い致します。 function isMailError ( $mail ) { if ( !preg_match( '/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mail ) ){ return true; } else { return false; } }

    • 締切済み
    • PHP
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • 正規表現

    function CheckHalfSizeKatakana($str) { $str= mb_trim(trim($str)); $pat = "^[ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲン?゛゜ゝゞー-・]+$"; if (mb_ereg_match($pat, $str)) { return true; } else { return false; } } このようにして半角カタカナをチェックしようと考えています。間違っているでしょうか?教えてください。

    • ベストアンサー
    • PHP
  • preg_match()の使い方

    PHPのpreg_match()でメールアドレスが対象のドメインに所属するかどうかをチェックするスクリプトを作成しようと以下を作成しました。 $ptn = preg_quote("abc.co.jp$"); $str = "user1@abc.co.jp"; $cnt = preg_match("/$ptn/", $str, $matches); 予定では上記で$cntに1が入ると考えていたんですが、 0が返ってきてしまいます。 preg_match()の使い方が誤っているのでしょうか? すいませんが、よろしくおねがいします。

    • 締切済み
    • PHP
  • フォームから入力される値のチェックについて

    お世話になります。PHP勉強中の初心者です。 タイトルにありますようにフォームから入力される値のチェックについてわからないことがあるので質問いたします。 私は書籍やサイトなどの例を参考にして郵便番号の入力値チェック(ハイフンなし)を if(!preg_match("/^[0-9]{7}$/",$_POST[zipcode])){ //エラーメッセージ } else{ $zipcode = $_POST[zipcode]; } のように記述しています。 この場合、POSTのデータが改ざんされたとしても数値以外は受け付けないので、これだけで「入力された値は安全」と考えて良いのでしょうか。 また、もしもこれが安全だとするなら、かなり極端な例ですが、 if(!preg_match("/^[一-龠ぁ-んァ-ヴーa-zA-Z0-9a-zA-Z0-9\s\ \¥\(\)\(\)\「\」\!\”\’\% \%\&\&\’\~\-\-\+\+\<\>\.\,\,\、\。\_\_\;\:\:\『\』\【\】\[\]\/\@\?\=\=\÷\× \・\※\■\□\★\☆\▲\△\▼\▽\◎\○\●\〒\←\→\↑\↓\…]{1,50}$/u",$_POST[str])){ //エラーメッセージ } else{ $str = $_POST[str]; } とすれば、POSTデータをそのままHTML表示したりデータベースなどに受け渡しても問題ないのでしょうか(文字コードはサイト全体でUTF-8を使用)。もしこれで安全なら、{1,50}の箇所で文字数の上限・下限も同時にチェックできるので使う場所によってはけっこう便利かなと思うのですが。。。 ひとりで学習しているので、入力チェックやエスケープなどどのようにしたら安全なのかわからず日々手探りの状態が続いています。お時間があれば皆さんがよく使う入力チェックやエスケープのやり方などもご教授いただけると幸いです。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 半角カタカナの入力チェックを作りたいです

    入力フォームで入力された文字に対して半角カタカナかチェックをしたいです。 function CheckHalfSizeKatakana($str) {  if (mb_ereg("^[ア-ン゛゜]+$",$str)) {    return true;  } else {    return false;  } } としたのですがうまくいきません。 PHP4です。

    • ベストアンサー
    • PHP
  • 文字列の比較

    いつも参考にさせて頂いています。 基本的なことなのですが、宜しくお願いします。 たとえば文字列"str"の空チェックをするとします。 -------------------以下参考ソース String str = "test"; 1. public static String isBlank(String str) { if(str == null || str.equals("")) { return true; } return false; } 2. public static String isBlank(String str) { if(str == null || str.length = 0) { return true; } return false; } ■1と2の違いって何かありますでしょうか? ■空チェックなら1と2のどちらを使うべきでしょうか? 以上宜しくお願いします。

    • ベストアンサー
    • Java
  • PHPで文字を検索して取り込みたい。

    PHPで文字を検索して取り込みたい。 %の文字が、何度か出現するソースなのですが そのソースの中にある50%のような全角で%の数値を 取り込みたいのです。 //////ソース//////// <table> <TR> <TD>あ</TD> <TD><B>88%</B>/TD> </TR> <TR> <TD>す</TD> <TD><B>85%</B>/TD> </TR> ........... </table> /////////////////////// 下記のように実行しましたが 思うような結果は得られません。 <?php $str = file_get_contents('http://123456/index.html'); if (preg_match('!<table>\s*?(.*?)</table>!s', $str, $res)) $text = mb_convert_encoding($res[1],"shift-jis","UTF-8");preg_match_all("/-*[0-9]+/",str_replace(",","",$text),$matches); print ($matches[0][0]); ////////////////////////////// php初心者です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • if文でチェックしている内容を教えてください

    メールアドレスをチェックしているif文ですが どんな内容をチェックしているのでしょうか? if (preg_match('/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i', $mailaddress))・・・

    • ベストアンサー
    • PHP

専門家に質問してみよう