Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #8527 -- Made CAPostalCodeField more forgiving of the input for…

…mat. Thanks to Claude Paroz.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16175 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 02b837d38a37239dcd7366e7735e12aff51ab790 1 parent c5f58f5
@jezdez jezdez authored
View
18 django/contrib/localflavor/ca/forms.py
@@ -4,7 +4,7 @@
from django.core.validators import EMPTY_VALUES
from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select
+from django.forms.fields import Field, CharField, Select
from django.utils.encoding import smart_unicode
from django.utils.translation import ugettext_lazy as _
import re
@@ -12,7 +12,7 @@
phone_digits_re = re.compile(r'^(?:1-?)?(\d{3})[-\.]?(\d{3})[-\.]?(\d{4})$')
sin_re = re.compile(r"^(\d{3})-(\d{3})-(\d{3})$")
-class CAPostalCodeField(RegexField):
+class CAPostalCodeField(CharField):
"""
Canadian postal code field.
@@ -25,9 +25,17 @@ class CAPostalCodeField(RegexField):
'invalid': _(u'Enter a postal code in the format XXX XXX.'),
}
- def __init__(self, max_length=None, min_length=None, *args, **kwargs):
- super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] \d[ABCEGHJKLMNPRSTVWXYZ]\d$',
- max_length, min_length, *args, **kwargs)
+ postcode_regex = re.compile(r'^([ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]) *(\d[ABCEGHJKLMNPRSTVWXYZ]\d)$')
+
+ def clean(self, value):
+ value = super(CAPostalCodeField, self).clean(value)
+ if value in EMPTY_VALUES:
+ return u''
+ postcode = value.upper().strip()
+ m = self.postcode_regex.match(postcode)
+ if not m:
+ raise ValidationError(self.default_error_messages['invalid'])
+ return "%s %s" % (m.group(1), m.group(2))
class CAPhoneNumberField(Field):
"""Canadian phone number field."""
View
8 tests/regressiontests/forms/localflavor/ca.py
@@ -45,13 +45,17 @@ def test_CAPostalCodeField(self):
'T2S 2W7': 'T2S 2W7',
'T2S 2Z7': 'T2S 2Z7',
'T2Z 2H7': 'T2Z 2H7',
-
+ 'T2S2H7' : 'T2S 2H7',
+ 't2s 2h7': 'T2S 2H7',
+ 't2s2h7' : 'T2S 2H7',
+ 't2s 2H7': 'T2S 2H7',
+ ' t2s 2H7 ': 'T2S 2H7',
}
invalid = {
- 'T2S2H7' : error_format,
'T2S 2H' : error_format,
'2T6 H8I': error_format,
'T2S2H' : error_format,
+ 't2s h8i': error_format,
90210 : error_format,
'W2S 2H3': error_format,
'Z2S 2H3': error_format,
Please sign in to comment.
Something went wrong with that request. Please try again.