2012-05-03 104 views
2

我想在PHP中做一些驗證,其中一個是檢查輸入字符串中是否有特定字。 問題是,當我首先放置指定的單詞時,我的代碼似乎無法正常工作。PHP - strpos沒有檢查第一個字

下面的代碼:

$word = "aa bb cc dd"; 
if(strpos($word, 'aa') == false) 
{ 
    echo "wrong input"; 
} 

,但如果我改變$word要麼bb aa cc ddbb cc dd aa,它的工作原理。我想知道如何解決這個問題。

+4

請參閱PHP手冊中關於該功能的警告。提示:'==='(三):http://php.net/strpos – hakre

+0

感謝您的幫助!我不知道手動網站之前,所以我從另一個網站(這些例子不使用任何'==='這是爲什麼我與此混淆:)'strpos'謝謝所有答案雖然! ^^他們真的幫助。想知道爲什麼我減去只是因爲問這個問題而已>>當我困惑的時候,那些缺點不鼓勵我問問題> – aquatorrent

+0

好吧,如果與特定功能混淆,請參閱手冊並先閱讀,至少我會建議你那個。你可以問任何你想要的,有一天你可能會問一個很好的問題,而你會得到很多upvotes。或者你提出一些很好的答案。 – hakre

回答

9

strpos將返回false,如果你的字符串是不存在的。否則,它將返回字符串的位置。

在這種情況下,'aa'位於字符串的開頭,這意味着它位於位置0; 0評估爲假。

你需要做一個布爾值,對結果比較:

if(strpos($word, 'aa') === false) 
6

這是因爲strpos返回的單詞的位置,在這種情況下,0. 0是falsey。 ==不檢查相同的匹配,===。所以使用三重平等。

甚至在the docs

+0

抱歉,但我只知道文檔網站,當你在這篇文章上說:)但它的工作原理!謝謝 :) – aquatorrent

3

你應該用嚴格的比較操作,這將對陣同類型的,所以使用===將檢查它是否是一個布爾值:

if(strpos($word, 'aa') === false) 
{ 
    echo "wrong input"; 
} 

使用==是一個鬆散的比較,什麼都可以說真(除了true,1,string),例如

"false" == false // true 
"false" === false // false 

它是錯誤的,因爲它將字符串與返回false的布爾值進行比較。

3

因爲aa的位置是0,所以等於false

你必須使用: if(strpos($word, 'aa') === false)

4

strpos將返回0,爲「AA」是零字符。由於0 == false但不是===錯誤(它不是布爾值),所以您需要使用===而不是==