2014-03-25 61 views
-1

問題1如何檢查是否字是數組則返回匹配的字

我使用下面的檢查一些輸入元素不好的話,我想知道哪個字對用戶他們的文字是不允許的。我如何從匹配它的數組中獲得特定的單詞或單詞?而且,當用戶輸入多於一個不良詞時,這隻會檢測第一個詞並忽略其他詞。

問題2

我怎麼忽略下限和上限的情況下,這個代碼不承認「約翰」「約翰」爲同樣的事情。我不知道這是否是一個正則表達式的工作。如果這種情況很弱,請推薦另一種方法。 PHP

$BadWords = array("James", "June", "Jane"); 
if (in_array($comment, $BadWords)){ 
    echo 'No way... that is not allowed lol...'; 
} 

問題3速度

說我有2000年左右的話比較反對一個字,它的方式是最好的做這個過程更快,而不濫用資源,同時考慮到過濾不良詞語只是一個例子,因爲這不僅限於檢查不良詞彙,並且在任何情況下都不考慮數據庫。

謝謝。

+0

絕對不是_regex_作業。假如你的數組中有這個犯規詞是_rascal_,並且用戶輸入了_damn rascal_,那麼你的代碼就會失敗。 –

+0

想想實際上,你剛纔提到可能有2000字,現在例如。在2000年的話中,有10個不好的單詞,你會只顯示1個不允許的單詞,讓他糾正它,然後提交併顯示下一個? –

+0

你建議我做什麼? – user3109875

回答

1

使用array_search從密鑰

<?php 
$comment="James"; 
$BadWords = array("James", "June", "Jane"); 
$bwords = array_map('strtoupper',$BadWords); 
if (in_array(strtoupper($comment), $bwords)){ 
    $k=array_search($comment,$bwords); 
    echo $BadWords[$k]."\n"; 
    echo 'No way... that is not allowed lol...'; 
} 
+0

我喜歡這個,我們可以讓它不區分大小寫嗎? – user3109875

+0

@ user3109875我用不區分大小寫的匹配更新了我的答案 – Nambi

0

得到匹配的話,你可以用下面的代碼片段,將工作小寫和大寫

$comment="James"; // 'james' 
$BadWords = array("James", "June", "Jane"); 
$lowerCap = array_map('strtolower', $BadWords); 
    if (in_array(strtolower($comment), $lowerCap)){ 
    $k=array_search($comment,$lowerCap); 
    echo $BadWords[$k]."\n"; 
    echo 'No way... that is not allowed lol...'; 
} 
1

結合上述兩種答案,這將檢測如果有多個壞字,並且它與任何其他字符串串聯:

$comment="James junexyz"; 
$BadWords = array("James", "June", "Jane"); 
foreach($BadWords as $k=>$v){ 
    $pos = stripos($comment,$v); 
    if($pos!==false){ 
     echo $v. ' is not allowed'.'<br>'; 
    } 
} 

Demo

+0

是的,這樣可以檢查多個單詞,但是for_each會向用戶返回多個回覆。如在,如果兩個不好的話被發現。你會得到「詹姆斯並不受歡迎,junexyz是不允許的。」請檢查。 – user3109875

+0

@ user3109875如果用戶確實輸入了多個不好的單詞,該怎麼辦?你一次只想顯示1個?在echo後面使用'break'。 –

+1

@ user3109875,如果你繼續編輯你的問題,你永遠不會得到完美的答案。坐下來,放鬆一下,慢慢來..準備好您的問題並提交您的所有要求,然後發佈! –

相關問題