Regexfield不足以验证文本输入(Django表单)
在Django表单中,用户设置他们的用户名。表单中的用户名字段定义如下:Regexfield不足以验证文本输入(Django表单),regex,django,unicode,django-forms,Regex,Django,Unicode,Django Forms,在Django表单中,用户设置他们的用户名。表单中的用户名字段定义如下: username = forms.RegexField(max_length=50,regex=r'^[\w.@ +-]+$', help_text=_("Required. 50 characters or fewer. Letters, digits and " "@/./+/-/_ only."), error
username = forms.RegexField(max_length=50,regex=r'^[\w.@ +-]+$',
help_text=_("Required. 50 characters or fewer. Letters, digits and "
"@/./+/-/_ only."),
error_messages={
'invalid': _("This value may contain only letters, numbers and "
"@/./+/-/_ characters.")})
当正则表达式匹配时进行验证,否则不匹配。例如,设置用户名Bender*
无效,因此Bender@
有效
我注意到,如果用户输入阿拉伯语或波斯语文本,而不是优雅地使其无效,我的表单就会抛出一个严重错误。例如,如果尝试将作为用户名,则会抛出以下内容:
UnicodeEncodeError at /keep_username/
'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
为什么这段文字不会像平常一样失效(我该怎么做才能修复它)
提前谢谢 RegexField可以采用符合要求的正则表达式和字符串。我们这样试试好吗
import re
regex = re.compile('^[\w.@ +-]+$',re.UNICODE)
class Myclass(models.Model):
username = forms.RegexField(max_length=50,regex=regex,
help_text=_("Required. 50 characters or fewer. Letters, digits and "
"@/./+/-/_ only."),
你也可以处理它
对于forms.py
from django import forms
from django.core.validators import RegexValidator
class FooBar(forms.Form):
username_validator = RegexValidator(r'^[\w.@ +-]+$',
"This value may contain only letters, "
"numbers and @/./+/-/_ characters
username = forms.CharField(validators=[username_validator])
from django.db import models
from django.core.validators import RegexValidator
class FooBar(models.Model):
username_validator = RegexValidator(r'^[\w.@ +-]+$',
"This value may contain only letters, "
"numbers and @/./+/-/_ characters
username = models.CharField(max_length=200, validators=[username_validator])
或者在您的模型中.py
from django import forms
from django.core.validators import RegexValidator
class FooBar(forms.Form):
username_validator = RegexValidator(r'^[\w.@ +-]+$',
"This value may contain only letters, "
"numbers and @/./+/-/_ characters
username = forms.CharField(validators=[username_validator])
from django.db import models
from django.core.validators import RegexValidator
class FooBar(models.Model):
username_validator = RegexValidator(r'^[\w.@ +-]+$',
"This value may contain only letters, "
"numbers and @/./+/-/_ characters
username = models.CharField(max_length=200, validators=[username_validator])
请显示完整的回溯。