Регулярное выражение для поисковых запросов - PullRequest
0 голосов
/ 05 января 2010

У меня есть страница, созданная в Django, которая имеет свою собственную поисковую систему. В чем мне нужна помощь, так это в создании регулярного выражения, которое будет фильтровать только допустимые запросы, которые состоят только из букв польского алфавита (как прописных, так и строчных) и символов * и? Может ли кто-нибудь помочь?

EDIT: Я пробовал что-то подобное:

query_re = re.compile(r'^\w*[\*\?]*$', re.UNICODE)
if not query_re.match(self.cleaned_data['query']):
    raise forms.ValidationError(_('Illegal character'))

, но он также допускает некоторые недопустимые символы из разных алфавитов и не разрешает * некоторые? Запросы *.

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Если ваш языковой стандарт установлен правильно, вы должны использовать

query_re = re.compile(r'^[\w\*\?]*$', re.LOCALE|re.IGNORECASE)

\w соответствует буквенно-цифровым буквам, специфичным для данной локали: http://docs.python.org/library/re.html

1 голос
/ 05 января 2010

Попробуйте что-то вроде

regex = r'(?iL)^[\s\*\?a-z]*$'

при условии, что язык вашей машины польский. Первая часть (? IL) устанавливает флаги locale и ignorecase . ^ Соответствует началу строки, \ s соответствует любому пробелу, а a-z - любой строчной или заглавной букве (благодаря флагу игнорирования).

В качестве альтернативы, вместо использования (? L) и a-z, вы можете просто явно указать допустимые буквы (например, abcdefghijklmnopqrstuvwxyz).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...