2013-10-27 14 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との重複の多くはないと思います-to-check-if-a-string-contains-specific-words - 文字列の配列は文字列とは異なる性質を持っていますが、これを正規表現で調べています。どのようにこれに反対することができます "重複としてマーク"? – 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"(入力)に "Admin"(f.n.配列から)が含まれているので、 "admin12"がtrueを返すことを許可します。 – 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()'(1つの '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

関連する問題