Smarter USPhoneNumberField

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# stdlib
import re

# django
from django.forms.fields import EMPTY_VALUES, Field
from django.forms import ValidationError
from django.utils.encoding import smart_unicode


__all__ = ('phone_digits_re', 'USPhoneNumberField')
phone_digits_re = re.compile(r'^((\((?P<areacode_1>\d{3})\))|(?P<areacode_2>\d{3}))[ \-]*(?P<first>\d{3})[ \-]*(?P<last>\d{4})$')

class USPhoneNumberField(Field):
    " A USPhoneNumberField that accepts a wide variety of valid phone number patterns. "
    default_error_messages = {
        'invalid': u'The phone number is invalid.',
    }

    def clean(self, value):
        super(USPhoneNumberField, self).clean(value)
        if value in EMPTY_VALUES:
            return u''
        
        m = phone_digits_re.match( smart_unicode(value) )
        if m:
            return u'%s-%s-%s' % (m.group('areacode_1') or m.group('areacode_2'), m.group('first'), m.group('last'))
        raise ValidationError(self.error_messages['invalid'])

More like this

  1. Newforms Validation of Credit Card Numbers by humphreymurray 5 years, 1 month ago
  2. Validator for data by limodou 6 years, 3 months ago
  3. keywords arguments parser for custom template tags by bruno 4 years, 5 months ago
  4. Improved Pickled Object Field by taavi223 3 years, 10 months ago
  5. Get object/list or None by lokesh 3 years, 9 months ago

Comments

middlelord (on September 21, 2011):

Hello I am trying to implement but where do I place this code? in the Models.py or views.py ? Thank you for the Code

#

(Forgotten your password?)