diff --git a/specifyweb/backend/stored_queries/format.py b/specifyweb/backend/stored_queries/format.py index 079a9674db6..8f6d250b1d5 100644 --- a/specifyweb/backend/stored_queries/format.py +++ b/specifyweb/backend/stored_queries/format.py @@ -218,18 +218,30 @@ def make_expr(self, # Helper function to apply only string-ish transforms with no numeric casts def apply_stringish(expr): e = expr + if fieldNodeAttrib.get('trimzeros') == 'true': - numeric_str = cast(cast(e, types.Numeric(65)), types.String()) - e = case( - (e.op('REGEXP')(r'^-?[0-9]+(\.[0-9]+)?$'), numeric_str), - else_=cast(e, types.String()), - ) + e = cast(e, types.String()) + trimmed = e + + # remove leading zeros + trimmed = func.regexp_replace(trimmed, r'^(-?)0+([0-9])', r'\1\2') + + # remove trailing zeros after decimal + trimmed = func.regexp_replace(trimmed, r'(\.[0-9]*?)0+$', r'\1') + + # remove trailing decimal point + trimmed = func.regexp_replace(trimmed, r'\.$', '') + + e = case((e.op('REGEXP')(r'^-?[0-9]+(\.[0-9]+)?$'), trimmed), else_=e) + fmt = fieldNodeAttrib.get('format') if fmt is not None: e = self.pseudo_sprintf(fmt, e) + sep = fieldNodeAttrib.get('sep') if sep is not None: e = concat(sep, e) + return e stringish_expr = apply_stringish(raw_expr) diff --git a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx index 76e1b3e8977..c8aff34b80e 100644 --- a/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx +++ b/specifyweb/frontend/js_src/lib/components/AppResources/__tests__/AppResourceEditButton.test.tsx @@ -70,18 +70,18 @@ describe('AppResourceEditButton', () => { const dialog = getByRole('dialog'); expect(dialog.innerHTML).toMatchInlineSnapshot(` -"