CLAUDE WATERMARK REMOVER · PRACTICAL TEST
Will cleaning repair an invalid Intl.Locale language tag?
Only for the selected marker in our fixture. en + U+200B + -US becomes accepted en-US. The underscore spelling en_US stays rejected, and a retained U+200D still triggers RangeError.
Open the Claude text cleaner · Full measured data
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.
| Fixture and mode | Input string and code points | Output and cleaner status | Observed before / after |
|---|---|---|---|
| Marked locale direct string / keep / invisible true | "en-US"U+0065 U+006E U+200B U+002D U+0055 U+0053 | "en-US"Removed 1 invisible character | {"accepted":false,"errorName":"RangeError"}{"accepted":true,"baseName":"en-US","language":"en","region":"US"} |
| Plain locale direct string / keep / invisible true | "en-US"U+0065 U+006E U+002D U+0055 U+0053 | "en-US"No selected invisible characters found | {"accepted":true,"baseName":"en-US","language":"en","region":"US"}{"accepted":true,"baseName":"en-US","language":"en","region":"US"} |
| Underscore locale direct string / keep / invisible true | "en_US"U+0065 U+006E U+005F U+0055 U+0053 | "en_US"No selected invisible characters found | {"accepted":false,"errorName":"RangeError"}{"accepted":false,"errorName":"RangeError"} |
| Retained joiner direct string / keep / invisible true | "en-US"U+0065 U+006E U+200D U+002D U+0055 U+0053 | "en-US"No selected invisible characters found | {"accepted":false,"errorName":"RangeError"}{"accepted":false,"errorName":"RangeError"} |
A locale identifier follows a specific grammar
Each fixture is passed directly to Intl.Locale. The marked en-US spelling throws RangeError before cleanup; deletion makes construction succeed with baseName en-US, language en and region US. The unmarked reference yields those properties at both stages. The underscore spelling remains rejected because no selected invisible character is present and the cleaner does not convert its separator. The retained-joiner row remains rejected as well. We record acceptance separately from the extracted properties, so rejected construction is not confused with a valid locale that simply has no region. All inputs are synthetic configuration labels rather than detected user preferences.
Locale construction is not language detection
The observer does not examine prose, infer a speaker language, test available translation data or format a date. It constructs a locale object from an explicit string in the saved runtime. The earlier collation guide compares strings with an already chosen locale; here the potential failure happens while interpreting the locale argument itself. ECMA-402 supplies that structural definition, and successful construction alone does not guarantee every downstream service supports the tag. The cleaner is a selected-character filter rather than a locale canonicalizer. The lowercase en and uppercase US in the reference are recorded outputs, not a universal recommendation for editing arbitrary identifiers.
Validate configuration after a targeted correction
Keep the original tag and obtain the intended locale from the system that produced the configuration. After identifying a known accidental marker, test the complete edited tag through the destination validator and separately check any support requirements for its formatter or service. Do not remove arbitrary punctuation until construction succeeds, because that can select a different locale or destroy an intended extension. Our four examples distinguish a repaired marker from an unchanged grammar mismatch and an unsupported deletion target. They do not enumerate all locale subtags, verify translation availability or establish that the cleaned tag matches any particular user preferred language.
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.cjsReference and next check
ECMA-402 Intl.Locale 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.