2011-01-31 5 views
0

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

UBmDNFZGrvtbFtxWMq

, но не такого рода с пространством или номер.

$ 800

Не уверен

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

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

+1

Какие подходы вы пробовали до сих пор? –

+3

Опишите, что вы пытаетесь совместить/не совпадать – justintime

+0

@middaparka Я пытаюсь использовать следующее регулярное выражение «/ [A-Za-z] /» для соответствия случайной строке. Но, похоже, он также отфильтровывает строку с пространством. это немного раздражает. – easycoder

ответ

6

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

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

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

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

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

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

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

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

+0

благодарю Марка. SpamAssassin выглядит хорошо для меня. – easycoder

+0

Я дал это +1. Однако, когда вы говорите, что обнаружение спама, как правило, более сложное, чем регулярное выражение, вы отчасти правы: SpamAssasin, с которым вы связаны, использует несколько методов обнаружения, но включает в себя целую кучу регулярных выражений, которые пользователь может добавить к используя файл конфигурации. – Spudley

+0

@Spudley: Спасибо за ваш комментарий. Я попытался улучшить формулировку, чтобы сделать намерение более ясным. Надеюсь, теперь это лучше. PS: Я действительно знаю, что SpamAssassin использует регулярные выражения для многих своих правил, и на самом деле SpamAssassin даже любезно продемонстрировал, почему регулярные выражения не всегда являются лучшим подходом: http://stackoverflow.com/questions/2007252/what- is-cause-the-2010-bugs/2007328 # 2007328 –

Смежные вопросы