我在这样的utils文件中有一个方法
def validate_string(string):
regex = r"^[a-zA-Z-_áéíóúÁÉÍÓÚÑñ][a-zA-Z0-9-_áéíóúÁÉÍÓÚÑñ\s]*$"
# return True if re.search(regex, string) else False
if re.search(regex, string):
return True
else:
return False
我在Django类基础视图中使用它来验证一些输入字段
class ClassBassedView(View):
def post(self, request, *args, **kwargs):
name = self.request.POST['menu_new_name']
description = self.request.POST['menu_new_description']
fields = [[name, "El nombre"], [description, "La descripcion"]]
re_error = False
for item in fields:
if re.search("[!#%&;]", item[0]):
re_error = "{0} no puede contener los caracteres #, !, ;, % o &.".format(item[1])
break
elif validate_string(item[0]) is False:
print "(%s) (%s)" % (item[0], validate_string(item[0]))
re_error = "{0} solo puede contener letras, numeros y guiones medios y bajos. No puede iniciar con"\
" numeros.".format(item[1])
break
然后,例如,当我运行此视图时,我发送帖子值:
{'menu_new_name': "Hello", 'menu_new_description': "Éstíló"}
我得到了印刷品:
(Éstíló) (False)
但是当我从shell运行时
python manage.py shell
我明白了:
>>> from dathLog.utils import validate_string
>>> s = 'Éstíló'
>>> validate_string(s)
True
>>>
>>> import sys
>>> sys.version
'2.7.6 (default, Sep 9 2014, 15:04:36) \n[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]'
我的正则表达式有问题吗?
答案 0 :(得分:2)
使用Python 2.x如果使用国家字符,则应将正则表达式指定为unicode:
regex = ur"^[a-zA-Z-_áéíóúÁÉÍÓÚÑñ][a-zA-Z0-9-_áéíóúÁÉÍÓÚÑñ\s]*$"
并在shell上测试时使用以下格式:
s = u'Éstíló'