19

我想要一个检查数组项是否包含字符串的函数。像这样:

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

然后检查是否admin12应该返回 true,因为admin12( admin) 的一部分也是数组的一部分。

我走了这么远:

$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.

这可能(以及如何)?

4

4 回答 4

8

遍历$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";
}

演示!

于 2013-10-27T13:56:12.990 回答
3
foreach ($forbiddennames as $forbiddenname) {
    $nametocheck = strtolower($stringtocheck);
    if(strpos($stringtocheck, $forbiddenname) !== false) {
        echo "This is a forbidden username.";
        break;
    }
}
于 2013-10-27T14:01:05.053 回答
2

如果您使用array_map、foreach 或其他不同的东西,这并不重要。可能的解决方案:

$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';
}
于 2013-10-27T14:00:38.640 回答
2

你想要 PHP 的“strpos”函数。循环遍历每个数组元素,然后根据“strpos” PHP strpos 参考检查每个元素

foreach($forbiddennames as $fn){
 if(strpos($stringtocheck,$fn)){
  //found it!
 }else{
  //not found!
 }
}
于 2013-10-27T14:00:56.583 回答