Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER Β· PRACTICAL TEST

Why does an RGI_Emoji property work with v but fail with u?

Our RGI_Emoji expression raises SyntaxError with u and matches a cleaned flag sequence with v. The flag contains two code points but is accepted as one string-property match. Validate the runtime and regex mode separately from cleanup.

Tested October 24, 2026 Β· v24.22.1 Β· 4 measured runs

Open the Claude text cleaner Β· Full measured data

Code-point comparison for Marked flag sequence

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 flag sequence
direct string / keep / invisible true
"πŸ‡Ίβ€‹πŸ‡Έ"
U+1F1FA U+200B U+1F1F8
"πŸ‡ΊπŸ‡Έ"
Removed 1 invisible character
{"unicode":{"error":"SyntaxError"},"v":{"matched":false},"codepoints":3,"utf16":5}
{"unicode":{"error":"SyntaxError"},"v":{"matched":true},"codepoints":2,"utf16":4}
Flag sequence
direct string / keep / invisible true
"πŸ‡ΊπŸ‡Έ"
U+1F1FA U+1F1F8
"πŸ‡ΊπŸ‡Έ"
No selected invisible characters found
{"unicode":{"error":"SyntaxError"},"v":{"matched":true},"codepoints":2,"utf16":4}
{"unicode":{"error":"SyntaxError"},"v":{"matched":true},"codepoints":2,"utf16":4}
Single pictograph
direct string / keep / invisible true
"πŸ˜€"
U+1F600
"πŸ˜€"
No selected invisible characters found
{"unicode":{"error":"SyntaxError"},"v":{"matched":true},"codepoints":1,"utf16":2}
{"unicode":{"error":"SyntaxError"},"v":{"matched":true},"codepoints":1,"utf16":2}
Two ASCII letters
direct string / keep / invisible true
"AB"
U+0041 U+0042
"AB"
No selected invisible characters found
{"unicode":{"error":"SyntaxError"},"v":{"matched":false},"codepoints":2,"utf16":2}
{"unicode":{"error":"SyntaxError"},"v":{"matched":false},"codepoints":2,"utf16":2}

The same property spelling has different compilation outcomes

The observer constructs the anchored RGI_Emoji expression independently under u and v. The u construction raises SyntaxError in every fixture. The v expression compiles and initially rejects the flag interrupted by U+200B. After the cleaner deletes that marker, it accepts the contiguous United States flag sequence. The saved code-point count changes from three to two and the UTF-16 length changes from five to four. A successful match therefore does not mean the accepted string consists of one scalar value or one UTF-16 unit.

Single and multiple code points can both satisfy this property

The plain flag reference has two regional-indicator code points and matches under v without cleanup. The single pictograph reference also matches but has one code point and two UTF-16 units. AB has two code points and two UTF-16 units yet fails the same expression. These controls distinguish sequence recognition from counting or broad acceptance of any two characters. No image rendering, font inspection or grapheme-break API is used; the results belong to regex matching against the runtime Unicode data. Counts are accompanying diagnostics rather than the matching algorithm.

Feature support and text preservation need separate checks

Use a runtime that supports the intended mode and string property, and retain the version with the experiment. An older engine may fail before it examines the text at all. Our observer catches compilation errors separately so an unsupported expression is not mislabeled a false match. The earlier flag guide tests duplicate or conflicting flag letters; here each flag is valid by itself and the property support differs by mode. The earlier emoji guide tests character preservation, while this one asks what sequence a destination regex recognizes.

One recognized sequence does not define all emoji behavior

The four controls do not enumerate every emoji sequence, modifier, variation selector or Unicode version. A retained joiner in other content is not automatically unwanted merely because this flag fixture has an inserted marker. The homepage uses a small explicit deletion set, not a universal emoji-normalization algorithm. All examples were locally authored and the flag fixture was deliberately interrupted for diagnosis. Recognition by a Unicode string property provides no evidence of Claude authorship, model-level marking or detector-score changes. Compare the real destination requirements before expanding a cleanup policy.

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

ECMAScript Unicode properties of strings 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.