Как сопоставить такую ​​​​случайную строку в PHP?

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

UBmDNFZGrvtbFtxWMq

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

$800

Точно сказать не могу

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

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


person easycoder    schedule 31.01.2011    source источник
comment
Какие подходы вы уже пробовали?   -  person John Parker    schedule 31.01.2011
comment
Опишите лучше, что вы пытаетесь сопоставить/не сопоставить   -  person justintime    schedule 31.01.2011
comment
@middaparka Я пытаюсь использовать следующее регулярное выражение /[A-Za-z]/ для соответствия случайной строке. Но кажется, что он также отфильтровывает строку с пробелом. это немного раздражает.   -  person easycoder    schedule 01.02.2011
comment
@easycoder Вы должны обновить свой вопрос, указав, что вы пробовали до сих пор - это побудит людей помочь вам, так как это не будет выглядеть так, будто вы пришли сюда только что для быстрого ответа. :-)   -  person John Parker    schedule 01.02.2011
comment
@middaparka спасибо за советы :) я должен сделать это лучше.   -  person easycoder    schedule 01.02.2011
comment
@middaparka Я обновил свой вопрос и надеюсь, что он станет понятнее. :)   -  person easycoder    schedule 01.02.2011
comment
@justintime, я обновил свой вопрос. :)   -  person easycoder    schedule 01.02.2011


Ответы (1)


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

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

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

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

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

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

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

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

person Mark Byers    schedule 31.01.2011
comment
Я дал этому +1. Однако, когда вы говорите, что обнаружение спама, как правило, более сложное, чем регулярное выражение, вы правы лишь частично: SpamAssasin, на который вы ссылались, использует несколько методов обнаружения, но включает целый набор регулярных выражений, которые пользователь может добавить в с помощью конфигурационного файла. - person Spudley; 01.02.2011
comment
@Spudley: Спасибо за ваш комментарий - я попытался улучшить формулировку, чтобы сделать намерение более ясным - надеюсь, теперь стало лучше. PS: я действительно знаю, что SpamAssassin использует регулярные выражения для многих своих правил, и на самом деле SpamAssassin даже любезно продемонстрировал, почему регулярные выражения не всегда являются лучшим подходом: stackoverflow.com/questions/2007252/ - person Mark Byers; 01.02.2011
comment
Я пытаюсь использовать reCAPTCHA, я думаю, что уровень сложности довольно высок для обычного пользователя. - person easycoder; 01.02.2011
comment
@easycoder: reCAPTCHA — не единственный продукт CAPTCHA — есть и другие конкурирующие продукты, на которые людям проще ответить. К сожалению, хотя людям легче ответить на них, машинам часто также легче их взломать. - person Mark Byers; 01.02.2011