Я пытаюсь заставить фильтр плохих слов работать. До сих пор, с ниже кода, фильтрация не происходит, если я типа плохое слово, как «bad1», перечисленные в массиве ниже, и я получаю эту ошибку:Плохие слова фильтр регулярных выражений не работает
Warning: preg_match() [function.preg-match]: Unknown modifier ‘/’
Вот код:
if (isset($_POST['text'])) {
// Words not allowed
$disallowedWords = array(
'bad1',
'bad2',
);
// Search for disallowed words.
// The Regex used here should e.g. match 'are', but not match 'care'
foreach ($disallowedWords as $word) {
if (preg_match("/\s+$word\s+/i", $entry)) {
die("The word '$word' is not allowed...");
}
}
// Variable contains a regex that will match URLs
$urlRegex = '/(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-
9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]
{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1
-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)
\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|localhost
|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.
(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-z
A-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*/';
// Search for URLs
if (preg_match($urlRegex, $entry)) {
die("URLs are not allowed...");
}
}
Почему именно так. Вы можете проверить совпадения с помощью http://php.net/strpos. Что касается вашего вопроса, регулярное выражение терпит неудачу, потому что вам требуется свободное пространство с обеих сторон. Вы хотите '\ s *', но тогда 'notbadword' также будет соответствовать ... – chris85
У вас есть две проблемы, сначала пропустили сообщение об ошибке. Это от ваших разделителей. Проверьте регулярное выражение URL-проверки. – chris85
Я бы использовал это регулярное выражение:/\ b $ word \ b/i, потому что он будет соответствовать плохим словам в конце и в начале строки тоже, а не только между словами ... – sinisake