Regexfield不足以验证文本输入(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

在Django表单中,用户设置他们的用户名。表单中的用户名字段定义如下:

    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])

请显示完整的回溯。