Привет всем ,
Я пытаюсь использовать 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 (я хочу, чтобы это не сработало)
Спасибо за любую помощь по регулярному выражению, это очень ценится.