2013-02-12 298 views
0

我試圖找到「用戶名」或「密碼」,不同的變型,如下所示,在不區分大小寫的方式:字符串比較

$unVar1 = "username"; 
$unVar2 = "user name"; 
$usernameVariations1 = strcasecmp($unVar1, $unVar2); 

$unVar3 = "User"; 
$unVar4 = "id"; 
$usernameVariations2 = strcasecmp($unVar3, $unVar4); 

$pwVar1 = "password"; 
$pwVar2 = "pass"; 
$passwordVariations1 = strcasecmp($pwVar1, $pwVar2); 

if ($element->value === $usernameVariations1 
    || $element->value === $usernameVariations2 
    || $element->value === $passwordVariations1) { 
    echo "Weee!"; 
} 
else { 
    echo "boo!"; 
} 

的問題是它輸出「boo 「爲foreach()輸出中的每個元素。我究竟做錯了什麼?是否有可能將所有這些值放入數組中?謝謝。

+0

您發佈的內容中沒有'foreach'循環,通常您的代碼非常混亂。你能詳細說明你想完成什麼嗎? – kba 2013-02-12 01:41:43

+0

這裏遺漏了一些代碼,很抱歉混淆@kba – CodeTalk 2013-02-12 01:45:31

回答

1

你正在使這個更復雜,然後它需要。如果您的用戶名和密碼不區分大小寫,只要當你對它們進行比較他們小寫:

if (strtolower($username) === strtolower($element->value)) 
{ 
    // ok 
} 

現在,如果你允許的空間將被添加到中間,和縮寫,那麼你可以嘗試B計劃:

$valid_usernames = array('Username', 'username', 'user name', 'UsE Nam'); 
if (in_array($element->value, $valid_usernames)) 
{ 
    // ok 
} 

請記住,您現在負責保留$valid_usernames完整。

+0

在示例2中實現strtolower()很容易嗎? – CodeTalk 2013-02-12 01:44:04

+0

我可以這樣做: if(in_array(strtolower($ element-> value),strtolower($ valid_usernames))){}? – CodeTalk 2013-02-12 01:46:24