2014-02-06 58 views
0

我想把我前段時間寫入PHP的Javascript轉換成。 此腳本用u替換特殊字符,例如é,e,ú,等等。正則表達式刪除所有字符

第一部分工作。然而,最後,我有一行檢查現在是否刪除了所有的字符。這最後一部分不起作用。

這就是:

if ($str != preg_replace("/[^a-zA-Z \-]+/g","",$str)) { 
    echo "error: ".$str." - ".preg_replace("/[^a-zA-Z \-]+/g","",$str); 
} 

現在,就像我說的,如果我讓與$str = "Péter";例如運行,那麼$ str中的腳本將是「彼得」做到了這一點之前。 但在任何情況下,我得到這樣的輸出:

error: Peter - 

我不知道這可能是因爲我用的是相同的正則表達式在我的JavaScript和有它的工作原理。

+0

它如何將'e'轉換爲'e'?它真的從'彼得'到'彼得'嗎? – sln

+0

因爲'preg_replace()'顯然返回一個空字符串,所以''Peter'!='''將會是true,在這種情況下,錯誤將會被echo'd –

+0

@MichaelWheeler是的,那不是問題。問題是爲什麼它返回空,我剛剛得到答案。見下文。 – koljanep

回答

2

PHP不承認/g修飾可言,這將導致preg_replace回到null和觸發警告(你可以將結果與var_dump驗證這一點),因爲無效模式。

刪除/g並且代碼按預期工作。 preg_replace已經替換了所有出現的模式,所以它仍然和JavaScript版本一樣。

+0

我不明白這可能是一個問題。如果腳本比較以下內容:if(「Peter!= preg_replace(」/ [^ a-zA-Z \ - ] +/g「,」「,」Peter「){},怎麼會這樣呢?刪除所有字符?你的意思是「e」與「e」不同或「P」與「P」不一樣?請解釋 – koljanep

+0

@koljanep:對不起,這是一個錯誤 - 我沒有我想問一下,PHP不能識別'/ g'修飾符(它也不需要它)。 – Jon

+0

好吧,刪除'g'完美的工作,謝謝! – koljanep

相關問題