Index: django/db/models/fields/__init__.py
===================================================================
--- django/db/models/fields/__init__.py	(revision 7261)
+++ django/db/models/fields/__init__.py	(working copy)
@@ -710,16 +710,17 @@
 class EmailField(CharField):
     def __init__(self, *args, **kwargs):
         kwargs['max_length'] = kwargs.get('max_length', 75)
+        self.regex = kwargs.get('regex')
         CharField.__init__(self, *args, **kwargs)
 
     def get_manipulator_field_objs(self):
         return [oldforms.EmailField]
 
     def validate(self, field_data, all_data):
-        validators.isValidEmail(field_data, all_data)
+        validators.isValidEmail(field_data, all_data, regex=self.regex)
 
     def formfield(self, **kwargs):
-        defaults = {'form_class': forms.EmailField}
+        defaults = {'form_class': forms.EmailField, 'regex': self.regex}
         defaults.update(kwargs)
         return super(EmailField, self).formfield(**defaults)
 
@@ -1088,18 +1089,20 @@
         return super(TimeField, self).formfield(**defaults)
 
 class URLField(CharField):
-    def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs):
+    def __init__(self, verbose_name=None, name=None, verify_exists=True, regex=None, **kwargs):
         kwargs['max_length'] = kwargs.get('max_length', 200)
         if verify_exists:
             kwargs.setdefault('validator_list', []).append(validators.isExistingURL)
         self.verify_exists = verify_exists
+        self.regex = regex
         CharField.__init__(self, verbose_name, name, **kwargs)
 
     def get_manipulator_field_objs(self):
         return [oldforms.URLField]
 
     def formfield(self, **kwargs):
-        defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists}
+        defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists,
+            'regex': self.regex}
         defaults.update(kwargs)
         return super(URLField, self).formfield(**defaults)
 
Index: django/core/validators.py
===================================================================
--- django/core/validators.py	(revision 7261)
+++ django/core/validators.py	(working copy)
@@ -165,8 +165,8 @@
         raise ValidationError, _('Enter a valid date/time in YYYY-MM-DD HH:MM format.')
     _isValidDate(field_data.split()[0])
 
-def isValidEmail(field_data, all_data):
-    if not email_re.search(field_data):
+def isValidEmail(field_data, all_data, regex = email_re):
+    if not regex.search(field_data):
         raise ValidationError, _('Enter a valid e-mail address.')
 
 def isValidImage(field_data, all_data):
Index: django/newforms/fields.py
===================================================================
--- django/newforms/fields.py	(revision 7261)
+++ django/newforms/fields.py	(working copy)
@@ -402,8 +402,8 @@
         'invalid': _(u'Enter a valid e-mail address.'),
     }
 
-    def __init__(self, max_length=None, min_length=None, *args, **kwargs):
-        RegexField.__init__(self, email_re, max_length, min_length, *args,
+    def __init__(self, max_length=None, min_length=None, regex=email_re, *args, **kwargs):
+        RegexField.__init__(self, regex, max_length, min_length, *args,
                             **kwargs)
 
 try:
@@ -498,8 +498,9 @@
     }
 
     def __init__(self, max_length=None, min_length=None, verify_exists=False,
-            validator_user_agent=URL_VALIDATOR_USER_AGENT, *args, **kwargs):
-        super(URLField, self).__init__(url_re, max_length, min_length, *args,
+            validator_user_agent=URL_VALIDATOR_USER_AGENT, regex=url_re,
+            *args, **kwargs):
+        super(URLField, self).__init__(regex, max_length, min_length, *args,
                                        **kwargs)
         self.verify_exists = verify_exists
         self.user_agent = validator_user_agent
Index: tests/regressiontests/forms/fields.py
===================================================================
--- tests/regressiontests/forms/fields.py	(revision 7261)
+++ tests/regressiontests/forms/fields.py	(working copy)
@@ -741,6 +741,15 @@
 ...
 ValidationError: [u'Ensure this value has at most 15 characters (it has 20).']
 
+>>> reg = re.compile('^[abc]+$')
+>>> f = EmailField(regex=reg)
+>>> f.clean('abc')
+u'abc'
+>>> f.clean('abcd')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid e-mail address.']
+
 # FileField ##################################################################
 
 >>> f = FileField()
@@ -923,6 +932,15 @@
 >>> f.clean('https://example.com')
 u'https://example.com'
 
+>>> reg = re.compile('^http://[abc]+$')
+>>> f = URLField(regex=reg)
+>>> f.clean('http://abc')
+u'http://abc'
+>>> f.clean('http://abcd')
+Traceback (most recent call last):
+...
+ValidationError: [u'Enter a valid URL.']
+
 # BooleanField ################################################################
 
 >>> f = BooleanField()
