The input below contains only plain digits — no separator
characters. An OpenType calt rule in a 5 kB patched
font draws the grouping. Caret, selection, copy and undo are 100%
native: there is nothing to skip over.
Try it
input.value = "1234567.89" — try
selecting everything and copying: you get plain digits.
Arrow keys: one step per digit — separators don't exist as positions.
It is impossible to select a separator on its own.
Backspace next to a group boundary always deletes a real digit.
Ctrl/Cmd+Z: the browser's own undo stack, untouched.
This demo has no input filtering on purpose — the page's only
JavaScript powers the two dropdowns and the readout.
Static samples (plain digit strings)
1234567.89Roboto · default
1234567.89ss01 · comma
-987654321ss02 · period
1234567.89ss03 · apostrophe
1000.12345decimals are never grouped
123456789012345678901234full grouping up to 24 digits
1234567.89JetBrains Mono · default
1234567.89letter-spacing canary — known to BREAK grouping in some browsers; if this row is ungrouped, that's why letter-spacing is forbidden on the field