Как сопоставить такую ​​случайную строку в PHP? - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь создать спам-фильтр домашнего изготовления. и хотите написать регулярное выражение, соответствующее следующему шаблону. Как я могу это сделать? спасибо.

UBmDNFZGrvtbFtxWMq

но не такие с пробелом или числом.

$ 800

Не уверен

У меня есть форма для отзывов пользователей, что-то в этом роде. Я пытаюсь обнаружить спам-сообщение. Я пытаюсь использовать веб-сервис Google ReCaptcha. Но, похоже, сложный уровень высок, и мне это не нравится. Я думаю, что это остановит ввод некоторых пользователей снова, если пользователь введет его неправильно в первый раз. Я также пробую поставщика веб-службы с фильтрами диапазона, но похоже, что пользовательское сообщение будет отправлено на их сервер. Я не чувствую себя комфортно об этом.

Так что мне пришла в голову идея создать функцию сопоставления шаблонов для проверки некоторого значения формы пользовательского ввода. Этот вопрос является одним из шаблонов, которые я хочу сопоставить.

1 Ответ

6 голосов
/ 31 января 2011

Я бы не стал пытаться сделать спам-фильтр.Эта проблема уже хорошо решена многими другими, такими как SpamAssassin .

Однако решение может выглядеть примерно так, как это регулярное выражение, чтобы обнаружить длинную строку букв:

/\b[A-Za-z]{18,}\b/

Уточнение, позволяющее избежать ложных совпадений в допустимых 18-буквенных словах, состоит в проверке того, что редко встречается в обычных словах, например, заглавная буква, встречающаяся после строчной буквы:

/(?:[A-Z]*[a-z]+[A-Z])[A-Za-z]{18,}\b/

Это все еще можетдать несколько ложных совпадений (например, имя «SpamAssassin» всего лишь на несколько букв не соответствует этому регулярному выражению).Он будет работать правильно для предоставленных вами примеров и большинства обычных текстов - но не очень хорошо для примеров кода.

Обнаружение спама, как правило, использует много более сложных методов, которые невозможно воспроизвести, используя только регулярные выражения.Может быть, лучше взглянуть на другие показатели, такие как частота букв каждой буквы, и проверить, найдено ли слово в словаре.Часто нет единой методики, которая дает хорошие результаты - требуется комбинация техник с оценкой баллов для каждого.Если электронное письмо вызывает слишком много правил с высокой оценкой, оно помечается как спам, но если оно затрагивает только несколько правил с низкой оценкой, это может быть приемлемым.Систему оценки можно сделать настраиваемой пользователем.

Редактировать: Что касается обновления вопроса, поскольку для ввода данных в веб-форму одним из стандартных подходов для предотвращения спама является использование CAPTCHA например reCAPTCHA .

...