问题1
我使用下面的代码来检查某些输入元素中的坏单词,并且我想告诉用户文本中的哪个单词是不允许的。我如何从匹配它的数组中获得特定的单词或单词?当用户输入多个坏单词时,它只检测第一个单词而忽略其余的。
问题2 。
我如何忽略小写和大写,这段代码不认为"John"和"John"是同一件事。我不知道这是否符合规则。如果这是弱,请推荐另一种方式。PHP
$BadWords = array("James", "June", "Jane");
if (in_array($comment, $BadWords)){
echo 'No way... that is not allowed lol...';
}
问题3 (Speed)
假设我有大约2000个单词来比较一个单词,哪种方式最好在不滥用资源的情况下更快地完成这个过程,同时考虑到过滤坏单词只是一个例子,因为这不仅限于检查坏单词,而且在任何情况下都不考虑数据库。
谢谢。
结合上面的两个答案,这将检测是否有多个坏词,以及它是否与任何其他字符串连接:
$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>';
}
}
使用 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...';
}
您可以使用下面的代码段,它将工作小写和大写
$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...';
}