TL;DR
波斯语必须使用的字符集如下:
使用^[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$
表示字母或使用与您的regex风格相关的代码点(并非所有引擎都支持\uXXXX
表示法):
^[\u0622\u0627\u0628\u067E\u062A-\u062C\u0686\u062D-\u0632\u0698\u0633-\u063A\u0641\u0642\u06A9\u06AF\u0644-\u0648\u06CC]+$
使用^[۰۱۲۳۴۵۶۷۸۹]+$
表示数字或关于你的正则表达式风格:
^[\u06F0-\u06F9]+$
元音使用[ ٌ ًّ َ ِ ُ ْ ]
,或者与你的正则表达式风格有关:
[\u202C\u064B\u064C\u064E-\u0652]
或者这些结合在一起.您可能还想在字符集中添加其他阿拉伯字母,如Hamza ء
.
Why are [\u0600-\u06FF]
and [آ-ی]
both wrong?
Although \u0600-\u06FF
includes:
گ
和代码点06AF
چ
和代码点0686
پ
,具有码点067E
ژ
和代码点0698
as well, all answers that suggest [\u0600-\u06FF]
or [آ-ی]
are simply WRONG.
i.e. \u0600-\u06FF
contains 209 more characters than you need! and it includes numbers too!
Whole story
这个答案的存在是为了修正一个常见的误解.代码点0600
到06FF
不表示100([آ-ی]
也不表示):
[\u0600-\u0605 ؐ-ؚ\u061Cـ ۖ-\u06DD ۟-ۤ ۧ ۨ ۪-ۭ ً-ٕ ٟ ٖ-ٞ ٰ ، ؍ ٫ ٬ ؛ ؞ ؟ ۔ ٭ ٪ ؉ ؊ ؈ ؎ ؏
۞ ۩ ؆ ؇ ؋ ٠۰ ١۱ ٢۲ ٣۳ ٤۴ ٥۵ ٦۶ ٧۷ ٨۸ ٩۹ ءٴ۽ آ أ ٲ ٱ ؤ إ ٳ ئ ا ٵ ٮ ب ٻ پ ڀ
ة-ث ٹ ٺ ټ ٽ ٿ ج ڃ ڄ چ ڿ ڇ ح خ ځ ڂ څ د ذ ڈ-ڐ ۮ ر ز ڑ-ڙ ۯ س ش ښ-ڜ ۺ ص ض ڝ ڞ
ۻ ط ظ ڟ ع غ ڠ ۼ ف ڡ-ڦ ٯ ق ڧ ڨ ك ک-ڴ ػ ؼ ل ڵ-ڸ م۾ ن ں-ڽ ڹ ه ھ ہ-ۃ ۿ ەۀ وۥ ٶ
ۄ-ۇ ٷ ۈ-ۋ ۏ ى يۦ ٸ ی-ێ ې ۑ ؽ-ؿ ؠ ے ۓ \u061D]
255个字符在Arabic block以下(0600–06FF),波斯语字母表有32个字母,除波斯语数字演示外,还有42个字母.如果我们在没有Tanvin(ً
、ٍِ
、ٌ
)和Tashdid(ّ
)的情况下添加元音(最初是阿拉伯语元音,很少在波斯语中使用),而这两个元音都是阿拉伯变音符号的子集,而不是波斯语,那么我们将得到46个字符.这意味着\u0600-\u06FF
包含的字符比您需要的多209个!
具有码点06F7
的۷
是数字7
的波斯语表示,具有码点0667
的٧
是相同数字的阿拉伯语表示.۶
是数字6
的波斯语表示,٦
是相同数字的阿拉伯表示.并且全部驻留在0600
到06FF
个码点中.
波斯数字四(۴
)、五(۵
)和六(۶
)的形状为
与阿拉伯语中使用的形状不同,其他数字具有
不同的代码点.
你也可以看到不同数量的波斯语/波斯语中不存在的其他字符,没有人愿意在验证名字或姓氏时使用它们.
[آ-ی]
还包含117个字符,这远远超过了验证所需的字符数.你可以通过100看到它们.