Zerowidth CleanerAll measured guides

CLAUDE WATERMARK REMOVER · PRACTICAL TEST

Does disabling invisible removal also disable dash replacement?

No. In our settings matrix, disabling invisible removal preserves U+200B while Replace still changes an em dash to a hyphen. The two controls act independently.

Tested October 6, 2026 · v24.19.0 · 12 measured runs

Open the Claude text cleaner · Full measured data

Code-point comparison for Hidden marker and em dash

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. 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
Hidden marker and em dash
direct string / keep / invisible true
"A​B—C"
U+0041 U+200B U+0042 U+2014 U+0043
"AB—C"
Removed 1 invisible character
{"marker":true,"emDash":true,"hyphen":false,"equalsABC":false}
{"marker":false,"emDash":true,"hyphen":false,"equalsABC":false}
Hidden marker and em dash
direct string / replace / invisible true
"A​B—C"
U+0041 U+200B U+0042 U+2014 U+0043
"AB-C"
Removed 1 invisible character; handled 1 dash
{"marker":true,"emDash":true,"hyphen":false,"equalsABC":false}
{"marker":false,"emDash":false,"hyphen":true,"equalsABC":false}
Hidden marker and em dash
direct string / remove / invisible true
"A​B—C"
U+0041 U+200B U+0042 U+2014 U+0043
"ABC"
Removed 1 invisible character; handled 1 dash
{"marker":true,"emDash":true,"hyphen":false,"equalsABC":false}
{"marker":false,"emDash":false,"hyphen":false,"equalsABC":true}
Hidden marker and em dash
direct string / keep / invisible false
"A​B—C"
U+0041 U+200B U+0042 U+2014 U+0043
"A​B—C"
No selected invisible characters found
{"marker":true,"emDash":true,"hyphen":false,"equalsABC":false}
{"marker":true,"emDash":true,"hyphen":false,"equalsABC":false}
Hidden marker and em dash
direct string / replace / invisible false
"A​B—C"
U+0041 U+200B U+0042 U+2014 U+0043
"A​B-C"
Replaced 1 dash
{"marker":true,"emDash":true,"hyphen":false,"equalsABC":false}
{"marker":true,"emDash":false,"hyphen":true,"equalsABC":false}
Hidden marker and em dash
direct string / remove / invisible false
"A​B—C"
U+0041 U+200B U+0042 U+2014 U+0043
"A​BC"
Removed 1 dash
{"marker":true,"emDash":true,"hyphen":false,"equalsABC":false}
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
Only marker
direct string / keep / invisible true
"A​B"
U+0041 U+200B U+0042
"AB"
Removed 1 invisible character
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
{"marker":false,"emDash":false,"hyphen":false,"equalsABC":false}
Only marker
direct string / replace / invisible true
"A​B"
U+0041 U+200B U+0042
"AB"
Removed 1 invisible character
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
{"marker":false,"emDash":false,"hyphen":false,"equalsABC":false}
Only marker
direct string / remove / invisible true
"A​B"
U+0041 U+200B U+0042
"AB"
Removed 1 invisible character
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
{"marker":false,"emDash":false,"hyphen":false,"equalsABC":false}
Only marker
direct string / keep / invisible false
"A​B"
U+0041 U+200B U+0042
"A​B"
No selected invisible characters found
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
Only marker
direct string / replace / invisible false
"A​B"
U+0041 U+200B U+0042
"A​B"
No selected invisible characters found
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
Only marker
direct string / remove / invisible false
"A​B"
U+0041 U+200B U+0042
"A​B"
No selected invisible characters found
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}
{"marker":true,"emDash":false,"hyphen":false,"equalsABC":false}

Six setting combinations for each input

The mixed input is measured with invisible removal enabled and disabled, and with all three dash modes. Enabled removal deletes U+200B in every dash mode. Disabled removal retains it in every dash mode. Keep retains the em dash, Replace changes it to one hyphen and Remove deletes it, independently of the checkbox. For the marker-only input with the checkbox off, the output is unchanged and the status says no selected invisible characters found. That status does not establish that the input lacks the marker; scanning was disabled.

A message describes the executed branch

The saved homepage callback performs the checkbox-controlled filter before its separate dash branch. Our matrix tests that order using the actual app script, rather than inferring it from labels. A dash-only report with the checkbox off can coexist with a retained selected marker. Earlier dash coverage experiments enumerate punctuation code points; this page instead measures control independence and the meaning of status when a branch is skipped. No browser-persistence, keyboard navigation or clipboard behavior is included in the minimal-DOM experiment.

Save both settings with an edited result

When documenting cleanup, record the checkbox state and dash mode beside the original and output. To preserve a selected character while changing punctuation, turn off invisible removal and choose the intended dash mode, then inspect the result. To preserve everything, use the unchecked state and Keep. Re-enable the filter when a selected-character scan is intended. The homepage does not encode settings into copied text, so another person cannot reconstruct the transformation from the copied output or a brief status message alone.

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 string operations 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.