2013-05-07 83 views
0

forms.py电话号码字段验证没有发生

class ContactForm(forms.ModelForm): 
    class Meta: 
     model = Contact 
    def clean_phone_no(self): 
     cd=self.cleaned_data 
     phone_no=cd.get('phone_no') 
     if(phone_no.isalnum()): 
      raise forms.ValidationError("Please enter a valid phone number") 

Hw的,我应该验证文本字段为数字字段。

1.不应该带符号。

2.It不应该采取字母数字字符

3.Should采取只有数字,不需要限制。

谷歌搜索验证,没有得到reuired的事情。任何人都可以帮助我这样做。

+1

在'\ d +'模式中使用'RegexValidator'。 https://docs.djangoproject.com/en/dev/ref/validators/#regexvalidator – 2013-05-07 07:57:06

+0

我是新来的django,我可以有一个小样本与此相关。 – 2013-05-07 08:00:50

+0

或者在您的模型定义中,您可以将'IntegerField'分配给'phone_no'。那也可以。 https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#field-types – 2013-05-07 08:07:07

回答

2

这应该适合您的情况。没有任何正则表达式和东西。

class ContactForm(forms.ModelForm): 
    class Meta: 
     model = Contact 

    def clean_phone_no(self): 
     phone_no = self.cleaned_data.get('phone_no', None) 
     try: 
      int(phone_no) 
     except (ValueError, TypeError): 
      raise ValidationError('Please enter a valid phone number') 
     return phone_no 

我使用的是简单的Python try...catch,并试图投的输入整数类型。任何不能转为int的字符串都会引发验证错误。

+0

如果它接受任何特殊字符 – 2013-05-07 08:30:54

+0

int ()'只会接受整数而没有任何错误。没有其他的。 – 2013-05-07 08:35:02

+0

验证工作正常,但验证的数据没有保存在分贝,我用return phone_no @最后一行 – 2013-05-07 08:39:58

2
from django.core.exceptions import ValidationError 

def clean_client_phone(self): 
    client_phone = self.cleaned_data.get('client_phone', None) 
    try: 
     if long(client_phone) and not client_phone.isalpha(): 
      min_length = 10 
      max_length = 13 
      ph_length = str(client_phone) 
      if len(ph_length) < min_length or len(ph_length) > max_length: 
       raise ValidationError('Phone number length not valid') 

    except (ValueError, TypeError): 
     raise ValidationError('Please enter a valid phone number') 
    return client_phone