2013-10-27 33 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

相关问题