=== modified file 'validator.py'
--- validator.py	2006-10-28 16:45:47 +0000
+++ validator.py	2006-10-28 17:01:20 +0000
@@ -362,13 +362,20 @@
     u'1234567890'
     >>> f.to_python('1234567890a')
     u'1234567890a'
+    >>> f = CharField(exact_length=3)
+    >>> f.to_python('1234')
+    Traceback (most recent call last):
+    ...
+    ValidationError: [u'Ensure this value has exactly 3 characters.']
+    >>> f.to_python('123')
+    u'123'
     """
-    def __init__(self, max_length=None, min_length=None, required=True, widget=None):
+    def __init__(self, max_length=None, min_length=None, exact_length=None, required=True, widget=None):
         Field.__init__(self, required, widget)
-        self.max_length, self.min_length = max_length, min_length
+        self.max_length, self.min_length, self.exact_length = max_length, min_length, exact_length
 
     def to_python(self, value):
-        "Validates max_length and min_length. Returns a Unicode object."
+        "Validates max_length, min_length and exact_length. Returns a Unicode object."
         Field.to_python(self, value)
         if value in EMPTY_VALUES: value = u''
         if not isinstance(value, basestring):
@@ -379,6 +386,8 @@
             raise ValidationError(u'Ensure this value has at most %d characters.' % self.max_length)
         if self.min_length is not None and len(value) < self.min_length:
             raise ValidationError(u'Ensure this value has at least %d characters.' % self.min_length)
+        if self.exact_length is not None and len(value) != self.exact_length:
+            raise ValidationError(u'Ensure this value has exactly %d characters.' % self.exact_length)
         return value
 
 class IntegerField(Field):

