问题1
我正在使用以下内容检查某些输入元素中的错误单词,并且我想告诉用户不允许在其文本上使用哪个单词。如何从匹配它的数组中获取特定的单词?当用户输入多个坏词时,这只会检测到第一个单词并忽略其余单词。
问题2 。
如何忽略大小写,此代码无法识别“John”和“john”。我不知道这是否是一个正则表达式的工作。如果这个方法很弱,请另辟蹊径。 的 PHP
$BadWords = array("James", "June", "Jane");
if (in_array($comment, $BadWords)){
echo 'No way... that is not allowed lol...';
}
问题3 (速度)
假设我有大约2000个单词来比较一个单词,哪个方法最好在没有滥用资源的情况下更快地完成此过程,同时考虑到过滤坏单词只是一个例子,因为这不仅限于检查坏词和在所有情况下都不考虑数据库。
感谢。
答案 0 :(得分: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...';
}
答案 1 :(得分:1)
结合上述两个答案,这将检测是否存在多个badword,以及它是否与任何其他字符串连接:
$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 强>
答案 2 :(得分: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...';
}