19

配列の項目に文字列が含まれているかどうかをチェックする関数が欲しいです。そのような:

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

そして、( ) の一部も配列の一部であるため、チェックするとadmin12true が返されます。admin12admin

私はここまで来ました:

$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 に答える