3

私はこのような関数の一部を持っています:

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

これは、「ScriPt」や「」などのバリエーションではなく、正確な単語「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 に答える