From 2f14c2cedc9c92373471c1f98a80c81ba299584a Mon Sep 17 00:00:00 2001
From: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Date: Thu, 8 Feb 2024 10:58:54 +0100
Subject: [PATCH] Fixed #35172 -- Fixed intcomma for string floats.

Thanks Warwick Brown for the report.

Regression in 55519d6cf8998fe4c8f5c8abffc2b10a7c3d14e9.
---
 django/contrib/humanize/templatetags/humanize.py |  2 ++
 docs/releases/3.2.25.txt                         | 13 +++++++++++++
 docs/releases/4.2.11.txt                         | 13 +++++++++++++
 docs/releases/5.0.3.txt                          |  3 ++-
 docs/releases/index.txt                          |  2 ++
 tests/humanize_tests/tests.py                    | 12 ++++++++++++
 6 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 docs/releases/3.2.25.txt
 create mode 100644 docs/releases/4.2.11.txt

diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py
index 2c26f8944a..19000c185c 100644
--- a/django/contrib/humanize/templatetags/humanize.py
+++ b/django/contrib/humanize/templatetags/humanize.py
@@ -80,6 +80,8 @@ def intcomma(value, use_l10n=True):
     if match:
         prefix = match[0]
         prefix_with_commas = re.sub(r"\d{3}", r"\g<0>,", prefix[::-1])[::-1]
+        # Remove a leading comma, if needed.
+        prefix_with_commas = re.sub(r"^(-?),", r"\1", prefix_with_commas)
         result = prefix_with_commas + result[len(prefix) :]
     return result
 
diff --git a/docs/releases/3.2.25.txt b/docs/releases/3.2.25.txt
new file mode 100644
index 0000000000..c84483f783
--- /dev/null
+++ b/docs/releases/3.2.25.txt
@@ -0,0 +1,13 @@
+===========================
+Django 3.2.25 release notes
+===========================
+
+*Expected March 4, 2024*
+
+Django 3.2.25 fixes a regression in 3.2.24.
+
+Bugfixes
+========
+
+* Fixed a regression in Django 3.2.24 where ``intcomma`` template filter could
+  return a leading comma for string representation of floats (:ticket:`35172`).
diff --git a/docs/releases/4.2.11.txt b/docs/releases/4.2.11.txt
new file mode 100644
index 0000000000..c59f131b1a
--- /dev/null
+++ b/docs/releases/4.2.11.txt
@@ -0,0 +1,13 @@
+===========================
+Django 4.2.11 release notes
+===========================
+
+*Expected March 4, 2024*
+
+Django 4.2.11 fixes a regression in 4.2.10.
+
+Bugfixes
+========
+
+* Fixed a regression in Django 4.2.10 where ``intcomma`` template filter could
+  return a leading comma for string representation of floats (:ticket:`35172`).
diff --git a/docs/releases/5.0.3.txt b/docs/releases/5.0.3.txt
index 8fe37c9d90..384ce27fb7 100644
--- a/docs/releases/5.0.3.txt
+++ b/docs/releases/5.0.3.txt
@@ -9,4 +9,5 @@ Django 5.0.3 fixes several bugs in 5.0.2.
 Bugfixes
 ========
 
-* ...
+* Fixed a regression in Django 5.0.2 where ``intcomma`` template filter could
+  return a leading comma for string representation of floats (:ticket:`35172`).
diff --git a/docs/releases/index.txt b/docs/releases/index.txt
index 3f66974821..01c2ac949d 100644
--- a/docs/releases/index.txt
+++ b/docs/releases/index.txt
@@ -43,6 +43,7 @@ versions of the documentation contain the release notes for any later releases.
 .. toctree::
    :maxdepth: 1
 
+   4.2.11
    4.2.10
    4.2.9
    4.2.8
@@ -97,6 +98,7 @@ versions of the documentation contain the release notes for any later releases.
 .. toctree::
    :maxdepth: 1
 
+   3.2.25
    3.2.24
    3.2.23
    3.2.22
diff --git a/tests/humanize_tests/tests.py b/tests/humanize_tests/tests.py
index a78bbadafd..5e4f7f0ef7 100644
--- a/tests/humanize_tests/tests.py
+++ b/tests/humanize_tests/tests.py
@@ -129,12 +129,18 @@ class HumanizeTests(SimpleTestCase):
             -1234567.25,
             "100",
             "-100",
+            "100.1",
+            "-100.1",
+            "100.13",
+            "-100.13",
             "1000",
             "-1000",
             "10123",
             "-10123",
             "10311",
             "-10311",
+            "100000.13",
+            "-100000.13",
             "1000000",
             "-1000000",
             "1234567.1234567",
@@ -163,12 +169,18 @@ class HumanizeTests(SimpleTestCase):
             "-1,234,567.25",
             "100",
             "-100",
+            "100.1",
+            "-100.1",
+            "100.13",
+            "-100.13",
             "1,000",
             "-1,000",
             "10,123",
             "-10,123",
             "10,311",
             "-10,311",
+            "100,000.13",
+            "-100,000.13",
             "1,000,000",
             "-1,000,000",
             "1,234,567.1234567",