ISO 15924 script codes
Every writing system has an ISO 15924 four-letter code — Latn, Cyrl,
Arab, Hani — that identifies the script independently of any language. The
same short codes double as Unicode Script property aliases, so \p{Script=Latn}
works in modern regex engines, and they appear as the script subtag in BCP 47
language tags like zh-Hant. This reference lists common scripts with their
code, numeric code, Unicode alias and a sample glyph.
How it works
The code is always four letters, initial-capital then lowercase (Deva,
Hang). Each also has a three-digit numeric code (Latin = 215). Unicode pairs
the long name with the same short alias:
Script ISO 15924 Numeric Sample
Latin Latn 215 A B c
Cyrillic Cyrl 220 Ж д
Arabic Arab 160 ا ب
Han (Trad.) Hant 502 書
Devanagari Deva 315 क ख ग
Hebrew Hebr 125 א ב ג
Georgian Geor 240 ა ბ გ
Hangul Hang 286 가 나 다
Use the code as a Unicode property value (\p{Script=Cyrillic}) or as the
script subtag in a language tag (sr-Cyrl). The numeric code is mostly for
fixed-width legacy systems.
Using script codes in regular expressions
Modern regex engines with Unicode property support allow you to match code points by their script. This is cleaner and more correct than hand-built character classes:
// JavaScript (ES2018+)
/\p{Script=Arabic}/u.test('مرحبا') // true
/\p{Script=Latn}/u.test('hello') // true
/\p{Script=Deva}/u.test('नमस्ते') // true
// Python (via regex module or re with \p)
import regex
regex.fullmatch(r'\p{Script=Cyrl}+', 'Привет') // matches
Short aliases work too: \p{Script=Latn} and \p{Script=Latin} are equivalent. The advantage over character ranges like [А-я] is that property escapes automatically include the full Unicode block, including letters added in later Unicode versions.
Script codes in BCP 47 language tags
In an IETF BCP 47 language tag, the optional script subtag is placed between the language and region subtags:
zh-Hant-TW Traditional Chinese used in Taiwan
zh-Hans-CN Simplified Chinese used in mainland China
sr-Cyrl Serbian in Cyrillic script
sr-Latn Serbian in Latin script
uz-Arab Uzbek in Arabic script (older usage)
uz-Latn Uzbek in Latin script (current standard in Uzbekistan)
A script subtag is only needed when the language does not already imply a single script. You write en not en-Latn because English is always Latin. But Serbian and Uzbek switch scripts in different contexts, so the subtag is necessary there.
Tips and notes
- Codes are case-normalised:
Latnis canonical, notLATNorlatn. Zyyy(Common) andZinh(Inherited) cover punctuation and combining marks shared across scripts — useful when a regex must skip script-neutral glyphs.Haniis the umbrella for Han;Hans/Hantdistinguish Simplified/Traditional in language tags but both are sub-variants of the Hani block.- The Unicode Script_Extensions property handles glyphs used by several scripts (such as digits 0–9, which appear in many scripts); the plain Script property assigns each code point to exactly one script.
- Filtering runs entirely in your browser — anything you type or paste stays on your device.