Arabic Tashkeel: Diacritics and Removal Regex

Arabic tashkeel consists of combining marks attached to base letters, including short vowels, tanwin, shadda, and sukun. This reference lists common marks and additional signs in the Arabic block, explains a deliberately scoped removal regex, and recommends preserving original text when pronunciation, names, or Quranic annotation matters.

Common marks and combining signs

The dotted circle is a display aid, not part of the mark. Arabic labels are descriptive labels; the English column follows Unicode character names. Madda and combining hamza are included for identification, but the conservative removal example below does not remove them.

Common marks and combining signs
GlyphArabic labelUnicode name (without Arabic prefix)Code point
◌ًتنوين الفتحFathatanU+064B
◌ٌتنوين الضمDammatanU+064C
◌ٍتنوين الكسرKasratanU+064D
◌َفتحةFathaU+064E
◌ُضمةDammaU+064F
◌ِكسرةKasraU+0650
◌ّشدةShaddaU+0651
◌ْسكونSukunU+0652
◌ٓمدة فوقMaddah AboveU+0653
◌ٔهمزة فوقHamza AboveU+0654
◌ٕهمزة تحتHamza BelowU+0655
◌ٰألف خنجريةLetter Superscript AlefU+0670

Additional Arabic-block signs

Together with the common-mark table, this table covers every nonspacing mark (Unicode general category Mn) in the Arabic block U+0600–U+06FF in the Unicode 17 character database. Arabic labels are descriptive translations, not standardized Arabic character names; the English names identify the characters precisely.

The additional signs include honorific marks, smaller vowel marks, extended-language vowel signs and Quranic annotations. This inventory does not include all combining marks in Arabic extension blocks. Do not remove this entire table as a default normalization policy.

Additional Arabic-block signs
GlyphArabic descriptive labelUnicode name (without Arabic prefix)Code point
◌ؐعلامة صلى الله عليه وسلمSign Sallallahou Alayhe WassallamU+0610
◌ؑعلامة عليه السلامSign Alayhe AssallamU+0611
◌ؒعلامة رحمة الله عليهSign Rahmatullah AlayheU+0612
◌ؓعلامة رضي الله عنهSign Radi Allahou AnhuU+0613
◌ؔعلامة تخلصSign TakhallusU+0614
◌ؕطاء صغيرة عاليةSmall High TahU+0615
◌ؖألف ولام وياء صغيرة عالية مركبةSmall High Ligature Alef With Lam With YehU+0616
◌ؗزاي صغيرة عاليةSmall High ZainU+0617
◌ؘفتحة صغيرةSmall FathaU+0618
◌ؙضمة صغيرةSmall DammaU+0619
◌ؚكسرة صغيرةSmall KasraU+061A
◌ٖألف تحتيةSubscript AlefU+0656
◌ٗضمة مقلوبةInverted DammaU+0657
◌٘علامة نون غنةMark Noon GhunnaU+0658
◌ٙزواراكايZwarakayU+0659
◌ٚعلامة حركة صغيرة على شكل حرف لاتيني فوقVowel Sign Small V AboveU+065A
◌ٛعلامة حركة صغيرة على شكل حرف لاتيني مقلوب فوقVowel Sign Inverted Small V AboveU+065B
◌ٜنقطة حركة تحتVowel Sign Dot BelowU+065C
◌ٝضمة معكوسةReversed DammaU+065D
◌ٞفتحة بنقطتينFatha With Two DotsU+065E
◌ٟهمزة متموجة تحتWavy Hamza BelowU+065F
◌ۖصاد ولام وألف مقصورة صغيرة عالية مركبةSmall High Ligature Sad With Lam With Alef MaksuraU+06D6
◌ۗقاف ولام وألف مقصورة صغيرة عالية مركبةSmall High Ligature Qaf With Lam With Alef MaksuraU+06D7
◌ۘميم صغيرة عالية أوليةSmall High Meem Initial FormU+06D8
◌ۙلام وألف صغيرة عاليةSmall High Lam AlefU+06D9
◌ۚجيم صغيرة عاليةSmall High JeemU+06DA
◌ۛثلاث نقاط صغيرة عاليةSmall High Three DotsU+06DB
◌ۜسين صغيرة عاليةSmall High SeenU+06DC
◌۟صفر مستدير صغير عالSmall High Rounded ZeroU+06DF
◌۠صفر مستطيل قائم صغير عالSmall High Upright Rectangular ZeroU+06E0
◌ۡرأس خاء صغيرة عالية بلا نقطةSmall High Dotless Head Of KhahU+06E1
◌ۢميم صغيرة عالية منفصلةSmall High Meem Isolated FormU+06E2
◌ۣسين صغيرة منخفضةSmall Low SeenU+06E3
◌ۤمدة صغيرة عاليةSmall High MaddaU+06E4
◌ۧياء صغيرة عاليةSmall High YehU+06E7
◌ۨنون صغيرة عاليةSmall High NoonU+06E8
◌۪علامة وقف منخفضة فارغة الوسطEmpty Centre Low StopU+06EA
◌۫علامة وقف عالية فارغة الوسطEmpty Centre High StopU+06EB
◌۬علامة وقف مستديرة عالية ممتلئة الوسطRounded High Stop With Filled CentreU+06EC
◌ۭميم صغيرة منخفضةSmall Low MeemU+06ED

Remove common vocalization only

For a search key, this expression removes U+064B–U+0652 and U+0670. It preserves madda, hamza and the supplementary signs above. The function is intentionally named for its scope: do not label it “remove all Arabic marks.”

function removeCommonTashkeel(text) {
  return text.replace(/[\u064B-\u0652\u0670]/g, "");
}
const original = "\u0643\u064E\u062A\u064E\u0628\u064E";
const searchKey = removeCommonTashkeel(original);

Preserve evidence and pronunciation

Guidance: store the original alongside a derived search key. Removing marks can merge differently vocalized words and names. In Quranic text, preserve the supplied marks and annotation unless a qualified editorial policy defines a separate search representation.

Do not use /\p{M}/gu as a supposedly Arabic-only cleanup: it removes combining marks across scripts. Likewise, NFD followed by indiscriminate mark removal can affect hamza-bearing letters through decomposition. Normalization and vocalization removal are separate operations; test both against your actual corpus.

Related references and tools

Questions and answers

What does the removal regex delete?

The example deletes common vocalization marks U+064B–U+0652 and superscript alef U+0670. It preserves combining hamza, madda, and the supplementary signs listed on this page.

Should Quranic text or names be stripped?

Preserve the original text. A separate search key may remove selected marks under a documented policy, because stripping can lose pronunciation and merge distinct spellings.

Sources