(PHP)DBからデータを取得し、引数で取得した値とまったく同じな場合は処理を行い、異なる場合はエラーメッセージを表示させるにはどうしたらいいのでしょうか?


preg_match()を使用して一度試みましたが、例えば hatenas という値がDBに入っており引数で取得した値がhatenaの場合でも同じとみなされてしまいます。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/01/17 17:51:10
  • 終了:--

回答(3件)

id:ito-yu No.1

ito-yu回答回数323ベストアンサー獲得回数142006/01/17 18:01:20

ポイント30pt

http://php.net/preg_match

PHP: preg_match - Manual

preg_matchでもeregでも何でも、正規表現マッチとは一致するかどうかではなく、対象文字列の中にパターンが存在するか、を判定します。

文字列全体が一致することを確認したいときは、パターンの先頭と最後に明示的に先頭(^)・最後($)だと書いてやる必要があります。

preg_match(’/hatena/, ’hatenas’) はtrueを返しますが、preg_match(’/^hatena$/, ’hatenas’) はfalseを返します。

でも、ただの文字列比較なら、正規表現なんて不要では…?if($str1 == $str2){ } とかでいいんじゃないですか。

id:esecua

回答ありがとうございます。

実はただの文字列比較ではなく hatena,dood,foo のように,で区切られているものですので $str == $str2とはいかないのです。

ちなみにセキュリティ面ではどうなのでしょうか?preg_match(’/^hatena$/, ’値’)といった場合でも絶対にhatenaという値が入った場合のみ1を返すのでしょうか?それとも脆弱はやはりあるのでしょうか?

2006/01/17 18:12:27
id:moke3rd No.2

moke3rd回答回数34ベストアンサー獲得回数32006/01/17 18:31:46

ポイント2pt

http://jp.php.net/preg_match

PHP: preg_match - Manual

$subject = ’hatena,dood,foo’;

$subject .= ’,’;

$pattern = ’/hatena,/’;

if (preg_match($pattern, $str))

{

マッチした

}


こんな感じにDBからの文字列の最後にカンマを追加して、

検索文字列もカンマ付きで検索するという方法が簡単だと思います。


簡単ですが参考になればと思います。

id:esecua

回答ありがとうございます。

私がまったくの初心者でわからないのですが$subjectはどこに行ってしまったのでしょうか?

2006/01/17 19:22:05
id:moke3rd No.3

moke3rd回答回数34ベストアンサー獲得回数32006/01/17 18:38:31

ポイント28pt

http://jp.php.net/preg_match#

PHP: preg_match - Manual

例 2. 単語”web”を探す が参考になると思います。


¥bは単語の区切りになります。’/¥bhatena¥b/’で検索してください。


先ほどの回答には不備がありましたね。

カンマは先頭にも必要でした。ごめんなさい。

id:esecua

回答ありがとうございました。

2006/01/17 19:23:21
  • id:moke3rd
    $str は $subjectの書き間違いです。

    $str と書いたところは $subject と書き換えてください。
    重ね重ねすみませんでした。

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

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

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

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