2014-08-27 2 views
0

Я использую Asp.net Mvc4, и я успешно использую RegularExpression для блокировки плохих слов, но моя проблема в том, что если кто-то помещает эти плохие слова в верхний регистр, тогда он проходит, как я могу остановить это ? Это то, что у меня естьКак остановить различные комбинации слов

[RegularExpression("^((?!(www|gamble|keygen|http)).)*$", ErrorMessage = "Invalid word")] 

Так что, если кто-то ставит WWW было бы остановить его, но если они поставят Www WWW WWW было бы пройти; есть ли что-нибудь, что я могу сделать, чтобы остановить все комбинации слова?

+5

Используйте флаг 'i'. Он игнорирует случай. – krodmannix

+4

Если кто-то хочет передать что-то через текст, они будут, независимо от того, сколько ограничений вы вводите на место. –

+2

Просто не ходи туда. Как и Regexs, их легко обманывают посвященные плакаты. –

ответ

0

Я полагаю, вы не используете это для проверки на стороне клиента (я думаю, вы не хотите отправлять список плохих слов клиенту, не так ли?).

В этом случае вы можете использовать модификатор i, добавив (?i) к регулярному выражению, так как RegularExpressionAttribute не поддерживает модификаторы, поставляемые извне. Обратите внимание, что это не работает в JavaScript (поскольку оно не поддерживает встроенные модификаторы).

Но, как указывали другие, такую ​​защиту можно легко обмануть, и, что еще хуже, вы можете заблокировать законные запросы, поэтому будьте осторожны с этим. Например, вы должны использовать якоря \b, чтобы ограничить себя целыми словами, что позволит избежать множества неожиданных результатов.

+0

Спасибо за это, я буду осторожен с ним, и это сработало. – user1591668