2013-07-11 15 views
0

這是用於輸入文本字段的密碼。 這是我的代碼:php語法 - 在語句中使用'或'和'&&'

$vaar是什麼進入該領域。

if(($vaar !='pass01' or 'pass02') && (!empty($vaar))) {

我找不出正確的語法。我試過||,or,xor。 我也試過把'pass01''pass02'放在他們自己的()的地方。

我希望它做的是這樣的:

如果$vaar不是'pass01''pass02'$vaar不爲空,那麼這樣做:

只是一個語法錯誤,但我想不出它出來了!

+0

除了下面的好答案,我想補充一些一般的東西:PHP檢查表達式從左到右,如果一個完全失敗(沒有替代表達式用'OR'評估'true')它不會再檢查以下內容 – DanFromGermany

回答

4

您正在尋找:

if(!empty($vaar) && ($vaar != 'pass01' && $vaar != 'pass02')) { 

請注意,我先放empty()檢查,這將短路評價應$vaar其實是空的。

編輯:爲了更好地體現了OP的措辭(和邏輯),這等同於以下,因爲Demorgan's law.):

if(!empty($vaar) && !($vaar == 'pass01' || $vaar == 'pass02')) { 

閱讀次數:如果$vaar不爲空並且$vaarpass01pass02

+2

'x!= y ||對於不同的「y」和「z」,x!= z'總是返回true。 -1 –

+0

編輯指出,downvote刪除。 –

+0

@Kolink - 你說得對,我最初是用'&&'寫的,然後從讀OP改變它,但正確的邏輯表達式是用&&'。謝謝。 – nickb

1
if(($vaar !== 'pass01' and $vaar !== 'pass02') and (!empty($vaar))) { 
    // ... 
} 

或者:

if(($vaar !== 'pass01' && $vaar !== 'pass02') && (!empty($vaar))) { 
    // ... 
} 

你真正的意思是:

如果$vaar不等於 「pass01」 AND $vaar不等於 「pass02」 AND $vaar不爲空,然後...

請注意,我已將原始括號保留在那裏,但由於它們都是AND,因此可以將它們移除,如下所示:

if(!empty($vaar) && $vaar !== 'pass01' && $vaar !== 'pass02') { 
    // ... 
} 

在這裏,我也感動了empty語言構建的條件的開頭,因爲如果變量爲空,那麼條件,如果變量未定義將立即評估假,防止E_NOTICE錯誤Undefined variable $vaar

+0

建議首先移動'空'檢查,因爲這樣會縮短其他兩個條件(因爲它更寬泛),但也會阻止通知未定義變量的情況。 –

+0

@Kolink好主意,現在回答好了。 –