2017-02-02 9 views
1

Django形式では、ユーザーはユーザー名を設定します。フォームにユーザー名フィールドはそうのように定義されています。Regexfieldがテキスト入力を検証するには不十分です(Django形式)

username = forms.RegexField(max_length=50,regex=r'^[\[email protected] +-]+$', 
      help_text=_("Required. 50 characters or fewer. Letters, digits and " 
          "@/./+/-/_ only."), 
      error_messages={ 
       'invalid': _("This value may contain only letters, numbers and " 
          "@/./+/-/_ characters.")}) 

検証は、正規表現が一致したときに発生する、それ以外の場合はありません。たとえば、ユーザ名Bender*の設定は無効です。つまり、[email protected]が有効です。

ユーザーがエレガントに無効にするのではなく、アラビア語またはペルシア語のテキストを入力すると、フォームが厄介なエラーをスローすることに気付きました。例えば。

UnicodeEncodeError at /keep_username/ 

'ascii' codec can't encode characters in position 0-5: ordinal not in range(128) 

なぜテキストのこの作品は、通常のように無効になることはありません(と、私はこの問題を解決するために何ができる):1は、ユーザ名としてالعربیをしようとすると、以下がスローされますか?

ありがとうございます!

+0

内部用RegexValidator

でそれを処理することができます。 –

答えて

2

RegexFieldは、正規表現だけでなく文字列も取ります。私たちはそれをこのようにしようとしますか?

import re 

regex = re.compile('^[\[email protected] +-]+$',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."), 
1

また、完全なトレースバックを表示してくださいforms.py

from django import forms 
from django.core.validators import RegexValidator 


class FooBar(forms.Form): 
    username_validator = RegexValidator(r'^[\[email protected] +-]+$', 
             "This value may contain only letters, " 
             "numbers and @/./+/-/_ characters 
    username = forms.CharField(validators=[username_validator]) 

たりmodels.py

from django.db import models 
from django.core.validators import RegexValidator 


class FooBar(models.Model): 
    username_validator = RegexValidator(r'^[\[email protected] +-]+$', 
             "This value may contain only letters, " 
             "numbers and @/./+/-/_ characters 
    username = models.CharField(max_length=200, validators=[username_validator]) 
関連する問題