- ベストアンサー
完全一致のデータだけを検索でヒットさせる!
(1) <input type="hidden" name="word" value="大阪市"> (2) if ($wd =~ /^[\w.']+$/ ? $address =~ /$wd/i : index($address, $wd) >= 0) (1)のHTMLタグから受け取った「大阪市」を(2)のCGIによってデータ検索します。 東大阪市だと問題ないのですが、大阪市だと東大阪市も一緒にヒットしてしまいます。 何処を書きかえれば良いか教えて下さい。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
書いた直後に気づいたんですが、このindex文だと「東大阪市○○区」みたいなのにも引っかかっちゃいますね 特に理由が無いなら、普通に文字列比較した方がいいと思います。 if ($wd =~ /^[\w.']+$/ ? $address =~ /$wd/i : index($address, $wd) >= 0) ↓ if ($wd eq $address)
その他の回答 (3)
- ryu_chan
- ベストアンサー率37% (69/186)
$addressにはどのような形式の住所が入っているのでしょうか? 例えば市の前に都道府県があるとか、 「大阪府大阪市旭区・・・」 いきなり市から始まっているとか、 「大阪市旭区・・・」 郵便番号+空白の後に続いているとか、 「〒654-4871 大阪市旭区・・・」
お礼
レスありがとうございます。 if ($wd eq $address) で問題解決です! ..
- shiren2
- ベストアンサー率47% (139/295)
よくわからないですが、そのまま検索では駄目なんでしょうか。 $html =~ /value="大阪市"/ $wdに名前が入っているなら、文字列の比較演算子はeqです。 $wd eq "大阪市"
お礼
ご教示ありがとうございます。 if ($wd eq $address) で問題解決です!
- sholmes
- ベストアンサー率81% (89/109)
これだけだと、ちょっと情報が少ないかなとは思います。 以下は、推測込みで とりあえず$wdにvalue(ここでは大阪市)が、$addressに東大阪市なり那覇市なりが入ってるんだと理解しました。 んで、そのvalueで使われている文字種によって正規表現判定かindex判定か分けると。 となると多分、この2箇所の判定を厳しくしてやれば済むんじゃないでしょうか <変更1> $address =~ /$wd/i ↓ $address =~ /\A$wd\z/i <変更2> index($address, $wd) >= 0 ↓ index($address, $wd) == 0 Perlの文法はかじったぐらいなので、お手元の環境で動作確認をお願いします。
お礼
ご教示ありがとうございます。 たしかに if ($wd eq $address) で問題は解決ですよね! 頭が凝り固まっていたようで発想の転換が出来ませんでした^^; ありがとうございましたm(_ _)m