「0001」等の整数データから成る文字列の判定をbooleanで返すphpの関数を教えて下さい。

文字列は$idに格納されており、
is_numeric($id)
だと「00001」等の文字列をtrueで返してくれません。
また、preg_matchの使い方は良く分かりませんでしたのでご教示下さればうれしいです♪

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/10/24 20:39:40
  • 終了:2010/10/25 00:02:05

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4443ベストアンサー獲得回数18252010/10/24 21:53:15

ポイント35pt

こんな感じ。

$id = ...
if (preg_match("/\d+/", $id)) {
    // $id は、数字
}

preg_match の最初の引数にどんな文字列を渡すのかは、「正規表現」をキーワードに入れて検索するといいと思います。

id:ReoReo7

preg_matchについての表現が知りたかったので、助かりました。

ありがとうございます。

2010/10/24 23:57:29

その他の回答(1件)

id:a-kuma3 No.1

a-kuma3回答回数4443ベストアンサー獲得回数18252010/10/24 21:53:15ここでベストアンサー

ポイント35pt

こんな感じ。

$id = ...
if (preg_match("/\d+/", $id)) {
    // $id は、数字
}

preg_match の最初の引数にどんな文字列を渡すのかは、「正規表現」をキーワードに入れて検索するといいと思います。

id:ReoReo7

preg_matchについての表現が知りたかったので、助かりました。

ありがとうございます。

2010/10/24 23:57:29
id:HowAreYou No.2

HowAreYou回答回数91ベストアンサー獲得回数172010/10/24 22:02:10

ポイント35pt

当方の環境では is_numeric でも true になるのですが……

改行とか余計な物が付いていたりしないでしょうか。

preg_match を使った例と ctype_digit 関数を紹介しておきます。

<?php
$id = '0000005' ;

echo is_numeric($id) ;
//echo preg_match('/^\d+$/', $id) ;
//echo ctype_digit($id) ;
id:ReoReo7

コメント欄に示した通り、当方のミスでis_numericでもOKなことが確認できました。

しかしながら、preg_matchやctype_digitといった方法を知らなかったので、しれて良かったと思います。ありがとうございました。

2010/10/24 23:58:40
  • id:ReoReo7
    すみません、$idの値を間違っていました。
    $idが「0001」のとき
    is_numeric($id)はtrueでした!
  • id:windofjuly
    うぃんど 2010/10/24 23:03:01
    自分でミスに気づいたのであれば回答は締め切りにしておくべきでしたね
    あなたのコメントから1時間以上もあとに、どのような意図でご両人が回答しているのかわかりませんので、
    回答を開くべきかどうかは自動終了ぎりぎりまで考えても良いかもしれませんが、
    少なくとも新規での回答投稿は「回答の受付を中断」によって止めておくべきだと思いますよ
     
    マッチを使う場合の例は以下のようなものになります
    preg_match("/^\d+$/", $id)
    正規表現はVBAなど多くの他の環境でも使えます(言語によって方言はありますが基本的部分は、ほぼそのままで使えます)ので、
    いずれは身につけておいたほうがよいでしょうね
    http://php.net/manual/ja/function.preg-match.php
  • id:ReoReo7
    >windofjulyさん

    ありがとうございます。そうですね、締め切るべきでした。
    ご指摘ありがとうございました。次からそうします。

    当方の経緯ですが
    ●どこかのサイトでis_numericを使うより正規表現を使ったほうが良いとあったので、最初はpreg_matchでやったんですがうまくいきませんでした。
    ●次にis_numericでやったんですが、これもうまくいかないように思えました。
    ●後からis_numericでやると、うまくいきコメントしました。
    ●preg_matchについても知りたい気持ちがあり、回答締切りが遅れてしました。


    正規表現についても教えて頂きましてありがとうございます。大変参考になりました。

    本当に、いずれは身につけるべきですね。
  • id:windofjuly
    うぃんど 2010/10/25 01:36:46
    a-kuma3 さんの回答では数字が含まれていればマッチしてしまいますので不正解です
    $id = '00a001';でもtrueとなりますからやってみてください
     
    HowAreYou さんの回答では正しくマッチしますしctype_digitなど他の方法も提示してくださってます
    (私のコメントにも書きましたが先頭からを示す^と末尾までをしめす$がミソです)
     
    上げ足取りみたいですみませんが確認してみてください
    (丁寧かつ正確な回答と不正解回答が同じポイントで、ベストアンサーは不正解の方とは・・・単純な私なら怒り心頭ですね)
  • id:HowAreYou
    コメント読んでなかった。
    (´・ω・`)
  • id:a-kuma3
    コメント読んでないし、解答間違ってるし (´・ω・`)
    せめて、正規表現の解説を…


    「^」…… 行の頭
    「¥d」… 数字「0」~「9」
    「+」…… 直前の表現の一回以上の繰り返し
    「$」…… 行の末尾


    /^\d+/ は、↓のようにも書けます。
    /^[0123456789]+$/
    /^[0-9]+$/
    /^[0-9][0-9]*$/
  • id:ReoReo7
    いろいろと私のミスで2度手間&お手数をおかけしたみたいで、すみません。
    どうか気を悪くされないで下さい・・・。

    ●回答終了に焦ってしまって、コード確認不十分でした。
    以後気をつけます。

    ●いるか賞について
    確かに今回はコードも確認していませんでしたし、内容をちゃんと吟味すれば2つの例文を示して下さっている方もいらっしゃいましたね。今回、単純にpreg_matchが知りたかったので、それらを示してくださっていることと、次の理由でいるか賞選出させて頂きました。次回から改善できる点があれば気をつけたいと思います。

    ●回答には単純に回答の順番を重視しているかを差し上げているケースがあります。
    「回答者がしばらく誰もいない場合に、回答を始める」といった回答者様がいるらしい、ということを感じております。私は回答を決断し、時間を割いて下さるという行為を大変ありがたく感じております。そのため、誰も回答者がいない状態で最初のヒントを与えて下さった方を尊重し、その方に感謝の気持ちを込めているかを差し上げることが多いです。もちろん、2番目以降に回答下さった方にも大変感謝しているのですが、いずれも有用な回答を示してくださった方々、2番目や3番目の回答者様を比較するのも難しい場合が多く、甲乙つけ難い場合はこのような順序になる場合がある、ということをご理解頂ければ嬉しいです。ただ今回はコード確認が不十分ということで、当方のミスでした。失礼しました。

    >a-kuma3さん
    コードの意味の説明をありがとうございます!とても分かりやすくまとめられていて、参考になります。
  • id:ReoReo7
    それと、いるか賞のみならず、スターのシステムや付け方、相場についてもまだまだ付ける基準が自分の中で確立されていませんので、気まぐれにつけているように見える場合が多いと思います(実際、スターの意味は勉強中です。。)。これについても気づいた点があればご指摘下されば嬉しいです。

    まだまだ質問者としても未熟ですが、今後ともよろしくお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません