I want to find out if user has used the words admin
or username
anywhere in their possible username string.
So if user wants to use admin
Just look for words using word boundaries:
/\b(?:admin|username)\b/i
and if there is a match return error e.g.
if (preg_match('/\b(?:admin|username)\b/i', $input)) {
die("Invalid Input");
}
Square brackets in a regexp are not for grouping, they're for specifying character classes; grouping is done with parentheses. You don't want to anchor the regexp with ^
and $
, because that will only match at the beginning and end of the string; you want to use \b
to match word boundaries.
/\b(admin|username)\b/i
Try the below snippet to keep your list of words in Array
.
$input = "im username ";
$spam_words = array("admin", "username");
$expression = '/\b(?:' . implode($spam_words, "|") . ')\b/i';
if (preg_match($expression, $input)) {
die("Username contains invalid value");
}
else {
echo "Congrats! is valid input";
}
Working Fiddle URL:
http://sandbox.onlinephpfunctions.com/code/6f8e806683c45249338090b49ae9cd001851af49
This might be the pattern that you're looking for:
'#(^|\s){1}('. $needle .')($|\s|,|\.){1}#i'
Some details depend on the restrictions that you want to apply.