我试图找出一个字符串是否匹配我的数组IE中的任何坏词:
$badWords = Array('bad', 'words', 'go', 'here');
$strToCheck = "checking this string if any of the bad words appear";
if (strpos($strToCheck, $badWords)) {
// bad word found
}
问题是strpos只能检查一个字符串而不是一个数组,是否有一种方法可以在不循环遍历badwords数组的情况下执行此操作?
答案 0 :(得分:3)
不完全是,因为所有解决方案都不可避免地必须遍历您的阵列,即使它是“幕后”。您可以使用$ badWords创建正则表达式,但运行时复杂性可能不会受到影响。无论如何,这是我的正则表达式建议:
$badWordsEscaped = array_map('preg_quote', $badWords);
$regex = '/'.implode('|', $badWordsEscaped).'/';
if(preg_match($regex, $strToCheck)) {
//bad word found
}
请注意,如果它们包含任何特殊的正则表达式字符,例如/
或.
答案 1 :(得分:2)
array_intersect()为您提供匹配单词列表:
if (count(array_intersect(preg_split('/\s+/', $strToCheck), $badWords))) {
// ...
}
答案 2 :(得分:0)
<击> in_array 击> 读错了。
最简单的实现是为每个坏词调用strpos():
<?php
$ok = TRUE;
foreach($badwords AS $word)
{
if( strpos($strToCheck, $word) )
{
$ok = FALSE;
break;
}
}
?>
答案 3 :(得分:0)
试试这个..
$badWords = array('hello','bad', 'words', 'go', 'here');
$strToCheck = 'i am string to check and see if i can find any bad words here';
//Convert String to an array
$strToCheck = explode(' ',$strToCheck);
foreach($badWords as $bad) {
if(in_array($bad, $strToCheck)) {
echo $bad.'<br/>';
}
}
上面的代码将返回所有匹配的坏词,你可以进一步扩展它来实现你自己的逻辑,比如替换坏词等。