2012-01-20 12 views
7
$check = 'this is a string 111'; 
if ($check = 'this is a string') { 
echo 'perfect match'; 
} else { 
echo 'it did not match up'; 
} 

しかし、それは私がまさにそれだけで動作する場合にマッチする文字列を取得するように見えることはできません...一致しませんでした代わりに、それを完璧にマッチ毎回返す場合、文字列一致の一部アップ。PHPマッチ文字列を正確に

ボードコードと正規表現のパターンを使って少し複雑にしようとすると、悪夢になります。

if ($check = '/\[quote(.*?)\](.*?)\[\/quote\]/su') { 
$spam['spam'] = true; 
$spam['error'] .= 'Spam post quote.<br />'; 
} 

だから、ポストのみ引用タグが含まれている場合、それはスパムとみなされ、不時着しかし、私は私のパターンが間違っている、おそらくそれを解決するために見えることはできませんされます。

+0

アップ容易downvoterを作品例! –

+0

+1は割り当ての値を返すことができる言語の非常に実際的な結果/落とし穴なので、+1します。 – Joe

+0

@RobAgarこの_really_はデバッグしています101. Upvotesは、upv​​oteボタンの上にカーソルを置いたときに見ることができる、 "研究努力を示す役に立つ質問"です。どちらもここには適用されません。 – CodeCaster

答えて

2

等価演算子==ではなく、代入演算子=を使用しています。

あなたはif ($check == 'this is a string')

2

if ($check = 'this is a string')常に定義ので、もし

に常にtrueを返している$check変数に文字列を代入を使用する必要があります==だけではない=

$check = 'this is a string 111'; 
if ($check == 'this is a string') { 
echo 'perfect match'; 
} else { 
echo 'it did not match up'; 
} 

=は変数を割り当てます。

==

詳細についてはcomparison operatorsを参照してください。厳密な比較を行います緩い比較

===を行います。

+0

'常に定義されているため、常にtrueを返します。 'if($ check = 0)'を実行すると、falseと評価されます。実際にここで起こるのは、PHPが式の右辺をブール値として評価するということです。 – DaveRandom

+0

正確ですが、空でない文字列を割り当てる限り、それは真の同等物に評価されます。 – dweeves

+0

...文字列が ''0''y以外の場合 – DaveRandom

10

する必要がありますあなたが使用する必要が

if ($check == 'this is a string') { 
+1

実際に正確にしたい場合は厳密な比較を行います')演算子、それ以外の場合は以下のようになります:' if( '123' == 123) ' –

+0

基本文字列に対してはうまくいきましたが正規表現パターンで問題を複雑にするときはありません – C0nw0nk

+0

文字列比較は正規表現...これはpreg_matchを行う必要があるためです - http://php.net/manual/en/function.preg-match.php – Nick

3

等価比較の場合は、==演算子が必要です。 =は割り当てです。

if ($check = 'this is a string') { 

if ($check == 'this is a string') { 

心配しないでくださいする必要があり、我々はすべてそれをやりました。私はまだ:

2

==比較演算子は、ほとんどの場合に動作しますが、いくつかのエッジケース*で完全一致を行うことはできません。

===演算子を使用するのが最適です。

if ($check === 'this is a string') { 

==が突然

$check = '2'; 
if ($check == '   2') { 
関連する問題