Palindrome Checker
Check whether text reads the same in both directions after the transformations you choose. Compare one phrase or a batch of lines, inspect the normalized grapheme sequence, and see exactly where the first pair differs.
Order: optional NFC → optional lowercase → remove selected graphemes → segment the final sequence → compare from the outside inward. Punctuation with attached marks is removed as a whole grapheme. Symbols and standalone marks remain. Lowercase is locale-independent and is not full Unicode case folding.
Load a local text file
Compares graphemes in logical order after the displayed transformations; not a language-meaning judgment. Lowercase is not full Unicode case folding. Empty-after-filter input is empty, not an affirmative palindrome. Processing stays in this browser. Inputs are not uploaded, saved or rendered as HTML. Limit: 1 MiB of UTF-8 text; processing and exports can be cancelled.
Common questions
- What makes text a palindrome in this checker?
- After applying your displayed settings, the compared grapheme sequence must read the same from its beginning and end. The checker uses the browser’s Intl.Segmenter to handle user-perceived character clusters, including many combining-mark and emoji sequences. It compares logical text order, not a language’s meaning or its visual right-to-left layout.
- Which transformations are applied, and in what order?
- Optional NFC normalization runs first, followed by optional locale-independent lowercasing. The selected whitespace and punctuation graphemes are then removed, and the final text is segmented again before comparison. Turn off the filters and lowercase setting for a stricter comparison. Lowercase conversion is not full Unicode case folding.
- How are punctuation, symbols and emoji handled?
- Whitespace-only graphemes can be ignored. The punctuation filter removes graphemes consisting of Unicode punctuation and attached marks, as a whole cluster. Symbols such as +, ordinary emoji and standalone marks remain. Punctuation-based marked clusters, such as the # keycap, are removed when this filter is on. Removing separators can change how adjacent regional indicators or other characters combine, so the final text is segmented again.
- Where does the first mismatch occur in abca?
- The outer a characters match. The next compared pair is b at position 2 and c at position 3, so those are the first differing positions. Positions start at one and refer to the transformed grapheme sequence, not byte offsets or character offsets in the original input.
- Is empty text a palindrome?
- This tool labels it empty rather than counting it as a palindrome. The same applies when all text disappears under the selected filters. A single remaining grapheme does count as a palindrome.
- Does batch mode keep blank and trailing lines?
- Yes. Every source line is a separate input, including blank lines and the empty line after a final line break. CRLF, CR and LF are recognized as line separators. Results retain the original one-based line numbers. The batch subpage opens directly in this mode.
- Are previews or exports truncated?
- Result pages show 50 inputs at a time. Each preview is limited to 200 graphemes and 600 code points, with an explicit notice if shortened; a very long grapheme may be shortened visually. CSV and TXT exports include every input and the complete original and compared strings. CSV includes the comparison policy in its column heading and prefixes formula-like cells with an apostrophe; TXT escapes strings so empty values and line breaks remain explicit. Import CSV text columns as text to prevent spreadsheet auto-formatting. Batches of many short or empty lines can produce exports much larger than the source.
- Is text uploaded or saved?
- No. Input stays in browser memory and is processed in a cancellable local worker. The input limit is 1 MiB of UTF-8 text. Editing the input or settings clears stale results; cancellation, errors and the 30-second processing timeout preserve your original text. Files should be plain UTF-8 text. Input is never rendered as executable HTML.
Compares graphemes in logical order after the displayed transformations; not a language-meaning judgment. Lowercase is not full Unicode case folding. Empty-after-filter input is empty, not an affirmative palindrome.