Inspect Unicode · browser-local

Zero-Width Character Detector

Detect zero-width spaces, joiners, and other invisible characters that can hide in pasted text. GlyphSift lists each one with its code point and position so you can review before cleaning.

Index state
eligible
Reviewed
2026-08-24
Input limit
5,000 graphemes
20 graphemes21 code points25 bytes
Live result

Zero-Width Character Detector

2zero-width or invisible characters found
  • U+200BOffset 7Common · Non-ASCII · Zero-width · Invisible
  • U+200DOffset 14Inherited · Non-ASCII · Zero-width

Good fit

Use this tool when

  • Text behaves oddly in search or validation.
  • You suspect hidden characters after copying.
  • You want to audit content for invisible marks.

Keep the original

Avoid it when

  • You need full per-character inspection with scripts and categories.
  • You want to also flag bidirectional controls.
  • You are generating text rather than checking it.
01

Reviewed truth vectors

Examples that expose the edge cases

Inputvisible​hidden
Output1 zero-width character found at offset 7

A zero-width space sits between the words.

Inputplain text
Output0 found

Ordinary text reports nothing.

Inputa‍b
Output1 zero-width character found

A zero-width joiner is detected.

02

Transparent implementation

How it works

  1. 01

    Inspect each character and its code point.

  2. 02

    Flag the reviewed zero-width and invisible ranges.

  3. 03

    List each match with its position for review.

03

Known limitations

What the result cannot promise

It reports a reviewed set of code points, not every possible invisible character.

It does not delete characters; it reports them.

Some zero-width joiners are legitimate in emoji and scripts.

04

Questions before copying

Frequently asked questions

Are zero-width characters always bad?

No. Joiners are essential in emoji and some scripts; the detector reports them so you can decide.

Does it remove them?

No. It only locates them. Use the Invisible Character Detector for a safer-text version.

Can it prove text is clean?

It checks a reviewed set of code points, so treat a zero result as no reviewed marks found, not a guarantee.

05

Experience, expertise & trust

How we verify this tool

GlyphSift EditorialText-engine authors & reviewers

The GlyphSift Editorial team designs the deterministic text engine, writes each tool's examples against real Unicode edge cases, and reviews every claim before a page becomes eligible for indexing. We build and test the software we document; we do not outsource the copy to generic content mills.

Each tool page is reviewed against the same six input classes the engine is tested with — ASCII, emoji, combining marks, non-Latin scripts, empty input, and 5,000-grapheme input — and cannot become eligible if it is only a parameter variation of another page.

Automated evidence

  • Tool-contract & coverage suite30 deterministic cases

    tests/tools-30.test.mjs mirrors the ToolRunner dispatch and asserts every registered engineId returns the contracted output shape, plus a coverage guard so no tool silently drops characters.

    Run in: node --test after a production build (vinext build)
  • Rendered-HTML suite12 deterministic cases

    tests/rendered-html.test.mjs renders the deployed server bundle and asserts the Unicode-version manifest and each wave's tool markup are present in the server-rendered HTML.

    Run in: node --test against the built dist/server bundle
  • Unicode inspection suite11 deterministic cases

    tests/unicode-inspection.test.mjs verifies grapheme/code-point/byte counting and hidden-control detection using explicit \u escapes for combining and bidirectional characters.

    Run in: node --test against the runtime's Unicode data
  • Compatibility risk suite13 deterministic cases

    tests/compatibility.test.mjs checks that bidirectional controls, invisible characters, mixed scripts, and NFKC-changing input raise the documented risk status, and that safe-text stripping preserves ordinary content.

    Run in: node --test, deterministic analyzer

Standards this tool follows