我有Django设计的页面,它有自己的搜索引擎。我需要帮助的是正则表达式的构造,它将仅过滤有效查询,这些查询仅由波兰字母(大写和小写)和符号*和?组成。 ,任何人都可以提供帮助吗?
编辑: 我尝试过类似的东西:
query_re = re.compile(r'^\w*[\*\?]*$', re.UNICODE)
if not query_re.match(self.cleaned_data['query']):
raise forms.ValidationError(_('Illegal character'))
但它也允许来自不同字母表的一些无效字符,并且不允许* somest?ing *查询。
答案 0 :(得分:2)
如果您的语言环境设置正确,则可以使用
query_re = re.compile(r'^[\w\*\?]*$', re.LOCALE|re.IGNORECASE)
\w
匹配所有特定于语言区域的字母数字:http://docs.python.org/library/re.html
答案 1 :(得分:1)
尝试类似
的内容regex = r'(?iL)^[\s\*\?a-z]*$'
假设您的机器的区域设置是波兰语。第一部分(?iL)设置locale and ignorecase flags。 ^匹配字符串的开头,\ s匹配任何空格,a-z任何小写字母(或大写,由于ignorecase标志)。
或者,您可以只显式列出允许的字母(例如abcdefghijklmnopqrstuvwxyz),而不是使用(?L)和a-z。