diff --git a/django/core/validators.py b/django/core/validators.py
index 1e599ec..e33ab9e 100644
--- a/django/core/validators.py
+++ b/django/core/validators.py
@@ -181,10 +181,10 @@ class EmailValidator(object):
 
 validate_email = EmailValidator()
 
-slug_re = re.compile(r'^[-a-zA-Z0-9_]+$')
+slug_re = r'^[-a-zA-Z0-9_]+$'
 validate_slug = RegexValidator(slug_re, _("Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."), 'invalid')
 
-ipv4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
+ipv4_re = r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$'
 validate_ipv4_address = RegexValidator(ipv4_re, _('Enter a valid IPv4 address.'), 'invalid')
 
 
@@ -225,7 +225,7 @@ def ip_address_validators(protocol, unpack_ipv4):
         raise ValueError("The protocol '%s' is unknown. Supported: %s"
                          % (protocol, list(ip_address_validator_map)))
 
-comma_separated_int_list_re = re.compile('^[\d,]+$')
+comma_separated_int_list_re = '^[\d,]+$'
 validate_comma_separated_integer_list = RegexValidator(comma_separated_int_list_re, _('Enter only digits separated by commas.'), 'invalid')
 
 
diff --git a/tests/validators/tests.py b/tests/validators/tests.py
index f586270..62984be 100644
--- a/tests/validators/tests.py
+++ b/tests/validators/tests.py
@@ -14,6 +14,7 @@ from django.core.validators import (
     validate_ipv46_address, validate_ipv4_address, validate_ipv6_address,
     validate_slug,
 )
+from django.db.migrations.writer import MigrationWriter
 from django.test.utils import str_prefix
 
 
@@ -352,3 +353,35 @@ class TestValidatorEquality(TestCase):
             MinValueValidator(45),
             MinValueValidator(11),
         )
+
+
+class TestValidatorSerializability(TestCase):
+    """
+    Tests that all built-in class-based validators are serializable and
+    thus usable in migrated apps (#22943).
+
+    Function-based validators are always deconstructible and don't have
+    to be worried about.
+    """
+    def test_class_validator_serializability(self):
+        def test_serializability(validator, name):
+            try:
+                MigrationWriter.serialize(validator)
+            except ValueError:
+                self.fail(u"Serialization of %s failed" % name)
+
+        validators = [
+            (EmailValidator(), 'EmailValidator'),
+            (MaxLengthValidator(20), 'MaxLengthValidator'),
+            (MaxValueValidator(20), 'MaxValueValidator'),
+            (MinLengthValidator(20), 'MinLengthValidator'),
+            (MinValueValidator(20), 'MinValueValidator'),
+            (RegexValidator(r'^\w+$'), 'RegexValidator'),
+            (URLValidator(), 'URLValidator'),
+            (validate_comma_separated_integer_list, 'validate_comma_separated_integer_list'),
+            (validate_email, 'validate_email'),
+            (validate_ipv4_address, 'validate_ipv4_address'),
+            (validate_slug, 'validate_slug')
+        ]
+        for validator, name in validators:
+            test_serializability(validator, name)
