2013-10-27 34 views
5

我想要一個函數,檢查數組的項目是否包含一個字符串。 這樣:數組是否包含(的一部分)字符串?

array(1 => 'Super-user', 'Root', 'Admin', 'Administrator', 'System', 'Website', 'Owner', 'Manager', 'Founder'); 

然後檢查admin12應的admin12admin)的一部分返回true也是陣列的一部分。

我來到這麼遠:

$forbiddennames= array(1 => 'Super-user', 'Root', 'Admin', 'Administrator', 'System', 'Website', 'Owner', 'Manager', 'Founder');  

if(in_array(strtolower($stringtocheck), array_map('strtolower', $forbiddennames))){ 
     echo '"This is a forbidden username."'; 
    } else { 
     echo 'true'; 
    } 
} 

僅此而已回聲「這是一個禁止的用戶名。」當我檢查admin。我希望它也可以在檢查admin12時回顯。

這是可能的(以及如何)?

+2

我不認爲這是一個很大的重複與http://stackoverflow.com/questions/4366730/how檢查一個字符串是否包含特定字詞 - 一個字符串數組絕對具有不同的性質,而不僅僅是一個字符串,我正在研究用正則表達式來做這件事。如何反對這個「標記爲重複」? – guaka

回答

5

循環遍歷$forbiddennames數組,並使用stripos檢查,如果給定的輸入字符串匹配數組中的項目的任何

function is_forbidden($forbiddennames, $stringtocheck) 
{ 
    foreach ($forbiddennames as $name) { 
     if (stripos($stringtocheck, $name) !== FALSE) { 
      return true; 
     } 
    } 
} 

而且使用它象下面這樣:

if(is_forbidden($forbiddennames, $stringtocheck)) { 
    echo "This is a forbidden username."; 
} else { 
    echo "True"; 
} 

Demo!

+0

這允許「admin12」回顯true,而我希望它回顯「這是...」,因爲「admin12」(輸入)包含「Admin」(來自f.n.數組)。 – Isaiah

+0

@Isaiah:這是我的一個小錯誤。我意外地切換了'stripos()'的參數。請參閱更新的答案(和[演示](https://eval.in/57770)) –

+0

是的,你是對的! – Isaiah

2

如果你使用array_map,foreach或somet無關緊要與衆不同。可能的解決方案:

$forbiddenNames = array('admin', 'bannedName'); 
$input = 'Admin12'; 
$allowed = true; 
foreach($forbiddenNames as $forbiddenName) { 
    if(stripos($input, $forbiddenName) !== false) { 
     echo $input, ' is invalid'; 
     $allowed = false; 
     break; 
    } 
} 
if($allowed === true) { 
    echo $input, ' is valid'; 
} 
+0

也適用,謝謝! – Isaiah

2

你想要PHP的strpos函數。遍歷每個數組元素,然後檢查每個元素對「strpos」 PHP strpos reference

foreach($forbiddennames as $fn){ 
if(strpos($stringtocheck,$fn)){ 
    //found it! 
}else{ 
    //not found! 
} 
} 
+0

爲什麼要瀏覽整個數組,如果在發現無效名稱後有可能中斷? – Rangad

+0

如果你想要區分大小寫的搜索,'strripos'會更好。我會在'strpos'上使用它,但代碼示例基本相同 –

+1

@ChrisWesson:這是不同的。我認爲你的意思是'stripos()'(帶有一個'R'):) –

3
foreach ($forbiddennames as $forbiddenname) { 
    $nametocheck = strtolower($stringtocheck); 
    if(strpos($stringtocheck, $forbiddenname) !== false) { 
     echo "This is a forbidden username."; 
     break; 
    } 
} 
+0

你應該檢查!==,因爲strpos也可以返回0,如果發現匹配 – Rangad

+0

是的,絕對正確 – Ash

相關問題