I have a list of forbidden words. I have to check if one of those forbidden words is inside a given string. My current code working fine partially.
A match should be true
only and only if:
- any of the words in the string is an exact match with any of the forbidden words, e.g.: the pool is cold.
- any of the words in the string starts with any of the forbidden words, e.g.: the poolside is yellow.
A match should be false
otherwise, and that includes both of these cases which are not currently working fine:
- if any of the words in the string ends with any of the forbidden words, e.g.: the carpool lane is closed.
- if any of the words in the string contains any of the forbidden words, e.g.: the print spooler is not working.
Current code:
$forbidden = array('pool', 'cat', 'rain');
// example: no matching words at all
$string = 'hello and goodbye'; //should be FALSE - working fine
// example: pool
$string = 'the pool is cold'; //should be TRUE - working fine
$string = 'the poolside is yellow'; //should be TRUE - working fine
$string = 'the carpool lane is closed'; //should be FALSE - currently failing
$string = 'the print spooler is not working'; //should be FALSE - currently failing
// example: cat
$string = 'the cats are wasting my time'; //should be TRUE - working fine
$string = 'the cat is wasting my time'; //should be TRUE - working fine
$string = 'joe is using the bobcat right now'; //should be FALSE - currently failing
// match finder
if(preg_match('('.implode('|', $forbidden).')', $string)) {
echo 'match!';
} else {
echo 'no match...';
}
Relevant optimization note: the official $forbidden
words array has over 350 items, and the average given $string
will have around 25 words. So, it would be great if the solution stops the preg_match
process as soon as it finds the first occurrence.