diff --git a/src-ui/src/app/components/common/input/monetary/monetary.component.ts b/src-ui/src/app/components/common/input/monetary/monetary.component.ts
index ebfd9b6bf..6c17b2c76 100644
--- a/src-ui/src/app/components/common/input/monetary/monetary.component.ts
+++ b/src-ui/src/app/components/common/input/monetary/monetary.component.ts
@@ -51,7 +51,7 @@ export class MonetaryComponent extends AbstractInputComponent<string> {
   get monetaryValue(): string {
     if (!this.value) return null
     const focused = document.activeElement === this.inputField?.nativeElement
-    const val = parseFloat(this.value.toString().replace(/[^0-9.,]+/g, ''))
+    const val = parseFloat(this.value.toString().replace(/[^0-9.,-]+/g, ''))
     return focused ? val.toString() : val.toFixed(2)
   }
 
diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py
index f8537726f..26930ccec 100644
--- a/src/documents/serialisers.py
+++ b/src/documents/serialisers.py
@@ -546,7 +546,7 @@ class CustomFieldInstanceSerializer(serializers.ModelSerializer):
                 except Exception:
                     # If that fails, try to validate as a monetary string
                     RegexValidator(
-                        regex=r"^[A-Z][A-Z][A-Z]\d+(\.\d{2,2})$",
+                        regex=r"^[A-Z]{3}-?\d+(\.\d{2,2})$",
                         message="Must be a two-decimal number with optional currency code e.g. GBP123.45",
                     )(data["value"])
             elif field.data_type == CustomField.FieldDataType.STRING: