3

我有一个函数的一部分是这样的:

if (preg_match("#\bscript\b#",$userInput))
{
    $bannedWord = 'script';
    logHax();
    return TRUE;
}

这对我要完成的工作造成了问题,因为它只会匹配确切的单词“脚本”而不是它的变体,例如“ScriPt”或“ <script>”。

我想要的是不匹配字符串的示例以及原始字符串返回 true。

有人可以让我对此事有所了解。

此外,任何涵盖此类内容的教程将不胜感激,

谢谢!

4

3 回答 3

7

这个怎么样:

if (preg_match("/<script\b[^>]*>/i",$userInput))
{
    $bannedWord = 'script';
    logHax();
    return TRUE;
}
于 2012-04-13T21:21:22.267 回答
4

不区分大小写的匹配:

preg_match("#\bscript\b#i",$userInput)

注意i. 另请注意,这是文档的第一个示例

<?php
// The "i" after the pattern delimiter indicates a case-insensitive search
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}
?>

干杯

于 2012-04-13T21:08:07.207 回答
2

如果你真的想在字符串之前或之后匹配“任何东西”(不仅仅是一个词),那么你甚至不需要 preg_match 在这里,因为你可以这样做:

$userInputLower = strtolower($userInput);
if (strpos($userInputLower, 'script') !== false)
{
    $bannedWord = 'script';
    logHax();
    return TRUE;
}
于 2012-04-13T21:13:43.440 回答