diff --git a/django/core/validators.py b/django/core/validators.py
index ee026f5e1d..69cc76ffab 100644
--- a/django/core/validators.py
+++ b/django/core/validators.py
@@ -84,7 +84,7 @@ class URLValidator(RegexValidator):
 
     # Host patterns
     hostname_re = r'[a-z' + ul + r'0-9](?:[a-z' + ul + r'0-9-]*[a-z' + ul + r'0-9])?'
-    domain_re = r'(?:\.(?!-)[a-z' + ul + r'0-9-]*(?<!-))*'
+    domain_re = r'(?:\.(?!-)[a-z' + ul + r'0-9-]+(?<!-))*'
     tld_re = r'\.(?:[a-z' + ul + r']{2,}|xn--[a-z0-9]+)\.?'
     host_re = '(' + hostname_re + domain_re + tld_re + '|localhost)'
 
diff --git a/docs/releases/1.8.6.txt b/docs/releases/1.8.6.txt
index 76eb32902d..3383e253d0 100644
--- a/docs/releases/1.8.6.txt
+++ b/docs/releases/1.8.6.txt
@@ -44,3 +44,7 @@ Bugfixes
 
 * Added a helpful error message when Django and South migrations exist in the
   same directory (:ticket:`25618`).
+
+* Fixed a regression in ``URLValidator`` that allowed URLs with consecutive
+  dots in the domain section (like ``http://example..com/``) to pass
+  (:ticket:`25620`).
diff --git a/tests/validators/invalid_urls.txt b/tests/validators/invalid_urls.txt
index a3393d76ed..12a1226359 100644
--- a/tests/validators/invalid_urls.txt
+++ b/tests/validators/invalid_urls.txt
@@ -49,3 +49,4 @@ http://.www.foo.bar./
 http://[::1:2::3]:8080/
 http://[]
 http://[]:8080
+http://example..com/