PHP preg_match с использованием RegEx - Word Filter - PullRequest
1 голос
/ 12 июня 2011

Привет всем ,

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

Это для использования в фильтре ругательства, если «dave» найден, я заменю его чем-то другим. Я пытался придумать идеальное регулярное выражение , но мне не очень повезло. Пожалуйста, посмотрите следующие примеры и проблемы, которые я обнаружил до сих пор (я использовал 3 в качестве примера символа, который клиент мог бы использовать, чтобы «обмануть» проверку) ;


Использование: ~\b(?:3+)?d+(?:3+)?a+(?:3+)?v+(?:3+)?e+(?:3+)?\b~i

Хорошо

  • Ввод: dave = pass
  • Ввод: 3d3a3v3e3 = pass
  • Ввод: ddddaaaavvvveeee = pass
  • Ввод: 3ave = сбой

Не в порядке

  • Ввод: dd3ddaa3aa3vv3vvee3ee = ошибка (я хочу, чтобы это прошло)

Использование: ~\b[d3]+[a3]+[v3]+[e3]+\b~i

Хорошо

  • Ввод: dave = pass
  • Ввод: 3d3a3v3e3 = pass
  • Ввод: ddddaaaavvvveeee = pass
  • Ввод: dd3ddaa3aa3vv3vvee3ee = pass

Не в порядке

  • Ввод: 3ave = pass (я хочу, чтобы это не сработало)

Спасибо за любую помощь по регулярному выражению, это очень ценится.

Ответы [ 2 ]

2 голосов
/ 12 июня 2011

Не обсуждая, является ли это хороший фильтр ненормативной лексики (вероятно, нет!), Следующее регулярное выражение выполнит вашу спецификацию:

d.*a.*v.*e

Если «3» является единственным «специальным» символом, попробуйте следующее:

d3*a3*v3*e
2 голосов
/ 12 июня 2011

Это не сработает.

Например, ваш фильтр будет блокировать «пожарную машину»;)

Кто-то может также просто заменить u на v или c на <

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

Возможно, вам следует переосмыслить, зачем вам фильтр ненормативной лексики. Если ваш «клиент» этого хочет, попросите его предоставить список слов, которые он хочет заблокировать, это не ваша проблема.

...