Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Why does 21 get different plural categories for a count and a ranking?

For en-US, our cleaned 21 selects other under cardinal rules and one under ordinal rules. The number 11 remains other for ordinals. Choose the rule type deliberately; a category label is not a ready-made suffix.

Tested October 20, 2026 · v24.19.0 · 4 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Marked ordinal

Measured inputs and outputs

These are locally constructed test strings, not evidence that Claude inserts these characters. We executed the saved homepage script snapshot with a minimal DOM harness and compared exact strings. The invisible-checkbox state and dash mode appear in each row. The observations below test this page's specific question. Destination observations run independently on the exact input and cleaned strings in the recorded Node runtime. We make no detector-score or statistical-watermark removal claim.

Before and after observations; full code points and strings are in the JSON download.
Fixture and modeInput string and code pointsOutput and cleaner statusObserved before / after
Marked ordinal
direct string / keep / invisible true
"2​1"
U+0032 U+200B U+0031
"21"
Removed 1 invisible character
{"number":"NaN","cardinal":"other","ordinal":"other"}
{"number":"21","cardinal":"other","ordinal":"one"}
Twenty one
direct string / keep / invisible true
"21"
U+0032 U+0031
"21"
No selected invisible characters found
{"number":"21","cardinal":"other","ordinal":"one"}
{"number":"21","cardinal":"other","ordinal":"one"}
Eleven
direct string / keep / invisible true
"11"
U+0031 U+0031
"11"
No selected invisible characters found
{"number":"11","cardinal":"other","ordinal":"other"}
{"number":"11","cardinal":"other","ordinal":"other"}
Two
direct string / keep / invisible true
"2"
U+0032
"2"
No selected invisible characters found
{"number":"2","cardinal":"other","ordinal":"two"}
{"number":"2","cardinal":"other","ordinal":"two"}

The same accepted number selects different categories

The marked 21 initially converts to NaN and both rule types select other in this runtime. Once its U+200B is removed, Number yields 21, cardinal selection remains other and ordinal selection becomes one. The plain 21 control confirms that difference without any transformation. The important distinction is therefore not that a marker creates a special linguistic category. It is that two configured rule types ask different grammatical questions of the same accepted number. The observer records both results together so a category change cannot be attributed entirely to string cleanup.

Eleven prevents a last-digit shortcut

For eleven, the ordinal category is other; for two it is two. Both cardinal results are other in our en-US configuration. These controls show why an ordinal category cannot be inferred from the final visible digit alone. The test does not generate st, nd, rd or th. It returns category identifiers supplied by Intl.PluralRules, which an application may use to select a message or language-specific form. Reading one as the quantity one would also be a mistake: our accepted twenty-one selects that category under the ordinal configuration while retaining its numeric value of 21.

Validate the quantity before choosing a message

A production workflow should validate its numeric field before selecting grammar, then choose cardinal or ordinal according to whether it expresses a quantity or an ordered position. Our NaN result produces a category instead of a validation exception, so receiving other is not proof that the input was accepted as a meaningful rank. Keep the conversion result and domain restrictions separate from grammar. For example, an application may require positive integer rankings; this observer does not impose that policy. Test the selected locale with representative exceptions instead of hardcoding an English last-digit rule into a shared formatter.

Locale and output boundaries

Our earlier plural guide measures cardinal category selection after cleanup. This page measures the independent type option, with an eleven control that exposes a naive suffix shortcut. The evidence is limited to the recorded runtime, locale en-US and four authored strings. Other languages and option combinations require their own checks; category labels alone are not localized phrases or a complete ordinal formatter. The cleaner performs no grammatical analysis and does not select message templates. These fixtures are reproducible local data, not evidence about real Claude output, watermark detection, search demand or the quality of an application translations.

Reproduce this test

Save reproduce.cjs and tested-app.js in the same folder. Run the command below with Node.js. The harness prints its runtime, script SHA-256 and every measured row. Compare those rows with the original record. Using a newer script or runtime creates a new experiment; retain the version information with your rerun.

node reproduce.cjs

Reference and next check

ECMA-402 PluralRules provides the relevant primary definition. The table and fixture analysis are original measurements. For broader inspection, use our Unicode inspector. Read the scope distinction before interpreting cleanup as a watermark result.