我需要检查一个字符串是否包含任何一个被禁止的单词。我的要求是:
stripos()
我尝试了类似下面的内容
$string = "poker park is great";
if (stripos($string, 'poker||casino') === false)
{
echo "banned words found";
}
else
{
echo $string;
}
答案 0 :(得分:6)
使用preg_match匹配正则表达式:
$string = "poker park is great";
if (preg_match("/(poker|casino)/", $string)) {
echo "banned words found";
} else {
echo $string;
}
更新:根据评论和Mayur Relekar的回答,如果您希望匹配不区分大小写,则应在正则表达式中添加i
标记。
并且,如果你想匹配单词(即"扑克"应该在单词边界之前和之后,例如空格,标点符号或结尾-file),你应该用\b
...包围你的匹配组
所以:
...
if (preg_match("/\b(poker|casino)\b/i", $string)) {
...
答案 1 :(得分:1)
MarcoS是对的,除了在你的情况下你需要匹配确切的字符串而不是未绑定的字符串。为此,您需要为要完全匹配的字符串添加前缀和后缀\b
(\b
是单词分隔符)。
$string = "poker park is great";
if (preg_match("/\bpoker\b/", $string)) {
echo "banned words found";
} else {
echo $string;
}
答案 2 :(得分:0)
您可以使用数组并加入
$arr = array('poker','casino','some','other', 'word', 'regex+++*much/escaping()');
$string = 'cool guy';
for($i = 0, $l = count($arr); $i < $l; $i++) {
$arr[$i] = preg_quote($arr[$i], '/'); // Automagically escape regex tokens (think about quantifiers +*, [], () delimiters etc...)
}
//print_r($arr); // Check the results after escaping
if(preg_match('/\b(?:' . join('|', $arr). ')\b/i', $string)) { // now we don't need to fear
echo 'banned words found';
} else {
echo $string;
}
它使用单词边界并连接数组。
答案 3 :(得分:0)
$string = "park doing great with pokering. casino is too dangerous.";
$needles = array("poker","casino");
foreach($needles as $needle){
if (preg_match("/\b".$needle."\b/", $string)) {
echo "banned words found";
die;
}
}
echo $string;
die;