• ベストアンサー

substrで数値を抽出してのマッチングについて

$aという変数に100~9999のうち、任意の数値が1つ入るとします。 この$aの頭の3桁が100かそれ以下でしたら if(substr($a,0,3) <= 100){各処理;} で可能なのですが、例えば101~120、120~500、500~700、 などのように範囲でマッチングを行いたいのですが どうもうまくいきません。 if(substr($a,0,3) =~ /[101-120]/)ではないですよね…。 この場合どのように判定させれば宜しいのでしょうか? お詳しい方どうぞご教授お願い致します。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

$wk=substr($a,0,3); if(101<=$wk && $wk<=120){ print "101~120"; }

salemlight
質問者

お礼

お早いご返答ありがとうございます。 こちらの方法でうまくいきました。 大変感謝です!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

if(substr($a,0,3)=~ /1(0[1-9]|1[0-9]|20)/){ print "101~120"; }

salemlight
質問者

お礼

お早いご返答ありがとうございます。 こちらの方法でもうまくいきました。 もっと判定式の勉強をしたいと思います…。 貴重なお時間を割いていただきありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

条件をandで並べればよいのでは if((substr($a,0,3) >= 101) && (substr($a,0,3) <= 120))

salemlight
質問者

お礼

お早いご返答ありがとうございます。 こちらの方法でもうまくいきました。 elsifでつながっていくので、今回は#1様の方法で いきたいと思います。 貴重なお時間を割いていただきありがとうございます。 大変感謝です!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • substrで抜き取った全角文字列を正常に表示

    $moji1 = 'あいうえおかきくけこさしすせそ'; $moji2 = 'あいうえお...かきくけこ'; $moji3 = 'なにぬねの'; 上記のような3つの文字列を格納した変数があります。 それぞれの変数を使いリンクを貼りたいのですが、20バイトを超えた変数に対しては、substrで20バイトまでを表示し、リンクするようにします。 以下は$moji1をリンクにするソースです。 $byte = strlen($moji1); if ($byte > 20) {  $moji1 = substr($moji1,0,20); } echo '<a href="#">'.$moji1.'</a>'; moji2、moji3も全く同じ処理をします。 結果はmoji1、moji3は上手くいくのですが、moji2に関しては <a href="#">あいうえお...かき/a> このように</a>の'<'が消えてしまいます。 恐らく、20バイト目が全角で、表示が上手くいっていないのだと思うのですが、対処法がわかりません。 今は全角に変換してごまかしていますが、半角のものはなるべく半角で表示したいのです。 moji2を正常に表示させるには、どのような書き方をすれば良いのでしょうか。 アドバイスお願いします。

    • ベストアンサー
    • PHP
  • VBAの数値の判別方法について教えてください。

    毎度お世話になっております。 今回もVBAについて質問させてください。 以下の条件で数値を判別を行いたいのですがどうしても上手くいきません。 ・0以上1000以下である。 ・0.25の倍数である。 0以上1000以下である。 ⇒if 0 < 数値 = True and 数値 < 1000 = True  で判別できると思うのですが ・0.25の倍数である。 ⇒この処理がどうも上手くいきません。 数値 = 1 判定 = 数値 mod 0.25 で判定が「0」であるかないかで判別を行うつもりでしたが エラーになってしまいました。 何か良い方法がありますでしょうか? ご教授願います。 

  • 数値の検索と抽出

    エクセルワークシート上で A2~A10001 と B2~B10001 にランダムな2桁の数値が入力されているとして、 セル範囲 Range("B2:B10001")の数値を A2 の数値で検索し、条件に一致したA2の数値があれば、C2に転記(A2の数値) 無ければ、転記なし。 セル範囲 Range("B2:B10001")の数値を A3 の数値で検索し、条件に一致したA3の数値があれば、C3に転記(A3の数値) 無ければ、転記なし。 セル範囲 Range("B2:B10001")の数値を A4 の数値で検索し、条件に一致したA4の数値があれば、C4に転記(A4の数値)      !   無ければ、転記なし。     !               !              ! セル範囲 Range("B2:B10001")の数値を A10001 の数値で検索し、条件に一致したA10001の数値があれば、C10001に転記(A10001の数値) 無ければ、転記なし。 これが出来るマクロ文を教えてください。お願いします。

  • 正規表現で全角数値の検出

    あるアプリで以下のような判定を行うことで全角数値をエラーとしています。しかし、実際は全角数値がきても全角数値として認識されずelse側に処理が進んでしまいます。 調べたところ下記のようなサイトが見つかり「use utf8;」が存在することで全角数値を検出できなくなっているようです。なので「use utf8;」をコメント化してみたのですが結果は同じで処理はelse側に進んでしまいました。 ※ローカル環境だと「use utf8」をコメント化すると全角数値を検出し、if文内の処理が行われる http://blog.livedoor.jp/sasata299/archives/51080322.html 何かほかに考えられる原因ってありますでしょうか? また、どうアプリにて変数$test, $test2の両方に全角数値の「1」が入っているにもかかわらず 片方は、全角数値として検出されもう片方は全角数値として検出されないという現象もありまして 変数の内容をバイナリ?で表示させて比較してみようと思うのですがどうやってやればよいでしょうか? use utf8; my $test = '1'; # 全角数値の「1」 if($test =~ /\D/) { print 'エラー'; } else { print '正常'; }

    • ベストアンサー
    • Perl
  • 数値の抽出方法がわからず困っています

    テキストデータの処理がうまくいかず困っています。 ----------------------------------------------- a:0.001 b:-11.111 c:50.5 d:-12.345 ----------------------------------------------- といった文字列から ----------------------------------------------- 0.001 -11.111 50.5 -12.345 ----------------------------------------------- といった形で符号や小数点を含めて抽出したいのですが どのようにするのが良いのでしょうか。 各値は、それぞれの値がスペースによって区切られています。 また、各値は数値の大きさがそれぞれ異なり桁数が一定ではありません。 split や substr を用いてやろうとしているのですが、 なかなか思ったとおりの形で出力できません…

  • テキストボックスの数値チェック

    VB6ユーザ(初心者)です。 テキストボックスに入力した数値の範囲チェックを行い、任意の最小~最大範囲内か否かを判定しています。 最大の判定は問題無いのですが、最小側の判定は、正常な場合と、そうでない場合がありますので、どなたか教えてください。 例として、最小~最大範囲を-100~100とします。 1)正常な場合 1/2 「即値と比較する場合」 If Text1.Text < -100 Then '問題無く判定出来ます。 2)正常な場合 2/2 「定数と比較する場合」   標準モジュールに下記定数を定義しています。 Public Const LimitMax As Long = 100 Public Const LimitMin As Long = -100 If Text1.Text < LimitMin Then '問題無く判定出来ます。 3)正常でない場合 「2)の定数を変数に代入して比較する場合」 Dim MinVal As Long MinVal = LimitMin If Text1.Text < MinVal Then '正常に判定出来ません。 上記1),2)の場合は、正常に判定されます。 しかし、上記3)の場合、テキストボックスに「-1」または「-10」等の数値を入力すると、必ず「-100より小さい」と判別されてしまいます。 変数の値を確認すると、正常に「-100」が代入されています。 判定方法に問題があるのでしょうか?或いはテキストボックスのTextプロパティ(文字列)と変数の比較自体に問題があるのでしょうか? どなたか、アドバイスをお願いいたします。 開発環境は、以下の通りです。  OS: Win2000  VB: Ver6(SP6)

  • $dateA = substr($filelist[$_][0], 1

    $dateA = substr($filelist[$_][0], 11, 8) * "1.6"; 現状、CGIに上記の処理をしてdataAで取得した数値に1.6の数字を掛け算しています。 この掛け算を取得した数値が10以下の場合は適用しない為にイフブンを設定したいのですが、 その記述方法が分かりません。詳しい方おられましたらお教えいただけませんでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • C#のfloatに代入した値の==判定について

    普段 0.0000f~1.0000f の値で利用しているfloat型変数のAを if (A <= 0.01f) { A = -1f; } if (A == -1f) { 処理; } の様な==判定をして開発環境ではちゃんと動作しました。 代入する値は一桁の数値だけです。 これってプログラムを動かす環境によっては ==判定が起こらないなどの危険があるのでしょうか? 絶対に別の設計をした方が良いほど危ない行為だったりしますか?

  • エクセルの数値抽出方法

    エクセルで数値と-を取り出す方法を教えてください。 以下のB列にしたいのですができません。     A列        B列 -12,600スイス  -12,600 15,600米ドル   15,600 1,00円       100 -12,300米ドル  -12,300   色々ためしたのですが、-の数値が取れなかったりでお手上げ状態です。 よろしくお願いします。  

  • マッチング処理

    はじめまして、今、javaでマッチング処理を実装しているのですが、どうしても上手くいきません、どのようにすれば良いでしょうか? 以下は、要件です。御覧下さい。 「fileAとfileBがあり、それをソートした状態でマッチングを行う。 尚、fileAは、8桁の数字がランダムに格納されており、数は約20000件程度(重複した数字あり)である。また、fileBも同じような形で格納されており、数は30件程度(重複なし)である。これら2つのファイルをマッチングして、新しいファイルに書き出す」 今のところ、fileAとBをtreeSetでソートしたものの、上手くマッチング処理が働かず、出来たファイルは空か、全くマッチングされない状態のファイルが吐き出されるばかりです。正直、ハマりの状態で、googleで調べても、中々当たりのページがありません。どのようにすれば、よいでしょうか?御手数ですが、ご教授下さい。