Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 5677)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -950,7 +950,7 @@
         return "CharField"
 
     def formfield(self, **kwargs):
-        defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists}
+        defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists, 'max_length': self.maxlength}
         defaults.update(kwargs)
         return super(URLField, self).formfield(**defaults)
 
Index: django/newforms/fields.py
===================================================================
--- django/newforms/fields.py	(revision 5677)
+++ django/newforms/fields.py	(working copy)
@@ -295,8 +295,8 @@
                 continue
         raise ValidationError(ugettext(u'Enter a valid date/time.'))
 
-class RegexField(Field):
-    def __init__(self, regex, max_length=None, min_length=None, error_message=None, *args, **kwargs):
+class RegexField(CharField):
+    def __init__(self, regex, error_message=None, *args, **kwargs):
         """
         regex can be either a string or a compiled regular expression object.
         error_message is an optional error message to use, if
@@ -306,7 +306,6 @@
         if isinstance(regex, basestring):
             regex = re.compile(regex)
         self.regex = regex
-        self.max_length, self.min_length = max_length, min_length
         self.error_message = error_message or ugettext(u'Enter a valid value.')
 
     def clean(self, value):
@@ -314,16 +313,9 @@
         Validates that the input matches the regular expression. Returns a
         Unicode object.
         """
-        super(RegexField, self).clean(value)
-        if value in EMPTY_VALUES:
-            value = u''
-        value = smart_unicode(value)
+        value = super(RegexField, self).clean(value)
         if value == u'':
             return value
-        if self.max_length is not None and len(value) > self.max_length:
-            raise ValidationError(ugettext(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(ugettext(u'Ensure this value has at least %d characters.') % self.min_length)
         if not self.regex.search(value):
             raise ValidationError(self.error_message)
         return value
@@ -334,9 +326,9 @@
     r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$', re.IGNORECASE)  # domain
 
 class EmailField(RegexField):
-    def __init__(self, max_length=None, min_length=None, *args, **kwargs):
-        RegexField.__init__(self, email_re, max_length, min_length,
-            ugettext(u'Enter a valid e-mail address.'), *args, **kwargs)
+    def __init__(self, *args, **kwargs):
+        super(EmailField, self).__init__(self, email_re, ugettext(u'Enter a valid e-mail address.'),
+            *args, **kwargs)
 
 url_re = re.compile(
     r'^https?://' # http:// or https://
@@ -352,9 +344,9 @@
     URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)'
 
 class URLField(RegexField):
-    def __init__(self, max_length=None, min_length=None, verify_exists=False,
+    def __init__(self, verify_exists=False,
             validator_user_agent=URL_VALIDATOR_USER_AGENT, *args, **kwargs):
-        super(URLField, self).__init__(url_re, max_length, min_length, ugettext(u'Enter a valid URL.'), *args, **kwargs)
+        super(URLField, self).__init__(url_re, ugettext(u'Enter a valid URL.'), *args, **kwargs)
         self.verify_exists = verify_exists
         self.user_agent = validator_user_agent
 
