Соответствие регулярному выражению, не содержащему плохих слов - PullRequest
0 голосов
/ 25 декабря 2018

Как сделать пропуск preg_match, когда в теме нет плохих слов?Это делает обратное:

$pattern = '/\b(some|bad|words)\b/i';

function matches($pattern, $value) {
    echo "matches $pattern: $value, matches: " . preg_match($pattern, $value)."\n";
}

matches($pattern, "This should match");
matches($pattern, "This bad string should not match");

Все примеры, которые я нашел до сих пор, делают противоположное: они совпадают, когда в теме содержатся плохие слова.

Я хочу, чтобы он совпадал, если в нем нет плохих слов.

Пробовал несколько комбинаций и поисков, но не смог найти решение.С помощью '?!'с '\ b' кажется невозможным?

Ответы [ 3 ]

0 голосов
/ 25 декабря 2018

Если вы используете результаты preg_match () в качестве флага, и если все, что вас волнует
, это отсутствие плохих слов в строке, то самый быстрый способ это

^(?!.*\b(some|bad|words)\b)

Расширен

 ^                             # BOS
 (?!                           # Negative lookahead, a pseudo atomic group
      .* \b 
      ( some | bad | words )        # (1)
      \b 
 )
0 голосов
/ 25 декабря 2018
^((?!\b(some|bad|words)\b).)*$
0 голосов
/ 25 декабря 2018

Вы можете использовать это

^((?!some|bad|words).)*$

Демо

...