Question

I have a part of a function that goes like this:

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

This is causing a problem for what I am trying to accomplish because it will only match the exact word "script" and not variations of it, like "ScriPt" or "<script>".

What I would like to have is the examples of the not matched strings along with the original string return true.

Could someone provide me with a bit of understanding on this matter.

Also any tutorials that cover something like this would be greatly appreciated,

Thank you!

Was it helpful?

Solution

How's this:

if (preg_match("/<script\b[^>]*>/i",$userInput))
{
    $bannedWord = 'script';
    logHax();
    return TRUE;
}

OTHER TIPS

Case-insensitive matching:

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

Note the i. Also note that this the first example in the docs:

<?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.";
}
?>

Cheers

If you really want to match "anything" before or after the string (not just a word), then you do not even need preg_match here, bacuse you could do something like this:

$userInputLower = strtolower($userInput);
if (strpos($userInputLower, 'script') !== false)
{
    $bannedWord = 'script';
    logHax();
    return TRUE;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top