我使用MVC,我是新手。我想通过[RegularExpression]验证检查输入值是否仅为波斯语(字符)。所以我想使用正则表达式,需要检查Unicode的范围,但我不知道如何找到波斯语字符Unicode的范围。我对Regex的看法是对的吗?你的建议是什么,我怎么能找到波斯语的Unicode范围
[RegularExpression]
yacmzcpb1#
波斯语字符在以下范围内:[\u0600-\u06FF]试试看:
[\u0600-\u06FF]
Regex.IsMatch(value, @"^[\u0600-\u06FF]+$")
anhgbhbe2#
检查波斯语的第一个字母和最后一个字母范围,我认为是这样的:
"^[آ-ی]$"
enyaitl33#
Regex.IsMatch(Text, @"^([\u0600-\u06FF]+\s?)+$")
This Only Contains standard Arabic symbols range但波斯语也包括4更多字符:
ژ \uFB8A پ \u067E چ \u0686 گ \u06AF
所以你应该用途:
^[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF]+$
如果你想匹配Zero-width-non-joiner,你也应该添加这个:
\u200C
olmpazwi4#
\u0600-\u06FF
[آ-ی]
^[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$
^[۰۱۲۳۴۵۶۷۸۹]+$
[ ٌ ًّ َ ِ ُ ْ ]
或者是这些的结合。您可能需要添加其他阿拉伯字母,如Hamza ء到您的字符集。这个答案的存在是为了纠正一个常见的误解。代码点0600到06FF不表示**Persian / Farsi alphabet**([آ-ی]也不表示):
ء
0600
06FF
[\u0600-\u0605 ؐ-ؚ\u061Cـ ۖ-\u06DD ۟-ۤ ۧ ۨ ۪-ۭ ً-ٕ ٟ ٖ-ٞ ٰ ، ؍ ٫ ٬ ؛ ؞ ؟ ۔ ٭ ٪ ؉ ؊ ؈ ؎ ؏ ۞ ۩ ؆ ؇ ؋ ٠۰ ١۱ ٢۲ ٣۳ ٤۴ ٥۵ ٦۶ ٧۷ ٨۸ ٩۹ ءٴ۽ آ أ ٲ ٱ ؤ إ ٳ ئ ا ٵ ٮ ب ٻ پ ڀ ة-ث ٹ ٺ ټ ٽ ٿ ج ڃ ڄ چ ڿ ڇ ح خ ځ ڂ څ د ذ ڈ-ڐ ۮ ر ز ڑ-ڙ ۯ س ش ښ-ڜ ۺ ص ض ڝ ڞ ۻ ط ظ ڟ ع غ ڠ ۼ ف ڡ-ڦ ٯ ق ڧ ڨ ك ک-ڴ ػ ؼ ل ڵ-ڸ م۾ ن ں-ڽ ڹ ه ھ ہ-ۃ ۿ ەۀ وۥ ٶ ۄ-ۇ ٷ ۈ-ۋ ۏ ى يۦ ٸ ی-ێ ې ۑ ؽ-ؿ ؠ ے ۓ \u061D]
255个字符落在这个范围内,波斯语字母表有32个字母,除了数字的波斯语演示,它将是42。如果我们添加元音(最初是阿拉伯元音,在波斯语中很少使用)和Tanvin(ً,ٍِ ,ٌ )和Tashdid(ّ ),它们都是阿拉伯变音符号的子集,而不是波斯语,我们将以46个字符结束。这意味着:
ً
ٍِ
ٌ
ّ
带有代码点06F7的۷是数字7的波斯语表示,带有代码点0667的٧是同一数字的阿拉伯语表示。۶是数字6的波斯语表示,٦是同一数字的阿拉伯语表示。所有这些都驻留在0600到06FF代码点中。波斯数字4(۴)、5(۵)和6(۶)的形状与阿拉伯语中使用的形状不同,其他数字具有不同的码位。你可以看到不同数量的其他字符,不存在于波斯语/波斯语太,没有人愿意有他们,而验证一个名字或姓氏。[آ-ی]也包含117个字符,这比验证所需的字符多得多。你可以看到他们都使用**Unicode CLDR**。
06F7
۷
7
0667
٧
۶
6
٦
۴
۵
ua4mk5z45#
我在程序中使用了这个RegExp,它工作正常。希望能帮到你:
[پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤآإأءًٌٍَُِّ\s]+$
cwxwcias6#
波斯语字符在以下范围内:[\u0600-\u06FF] + [\s]试试看:
此图案包含字母和空格字符。
yv5phkfx7#
我在程序中使用这两个正则表达式,因为有些字母实际上可能是阿拉伯语:
^[!@#$%^&*(). ۱۲۳۴۵۶۷۸۹۰+-پچجحخهعغفقثصضشسیبلاﺐتنمکگوئدذرزطﺐظژؤآإأءًٌٍَُِّﻢﺷﺠﺪﮑﺬﻋﻮﻂﺶﺰﺣﻣﮕﻒﺤﻻﻄﻟﭼﻫﻼﻗﺒﺗﺨﻪﻬﻓﯾﺼﺟﮔﻇﺑﭽﺌﻞﺖﺿ]+$
^[ﻢﺷﺠﺪﮑﺬﻋﻮﻂﺶﺰﺣﻣﮕﻒﺤﻻﻄﻟﭼﻫﻼﻗﺒﺗﺨﻪﻬﻓﯾﺼﺟﮔﻇﺑﭽﺌﻞﺖﺿﺎﺄﭙﻈﻏﻦﯿﻔﻤﻨﻐﻌﮏﺻﺧﻃﭘﺳﻘﻧﯽﻖﺸﮐﻠﺴﺮﺘ]+$
它可能看起来不太好,但它在我的代码中运行良好。
7条答案
按热度按时间yacmzcpb1#
波斯语字符在以下范围内:
[\u0600-\u06FF]
试试看:
anhgbhbe2#
检查波斯语的第一个字母和最后一个字母范围,我认为是这样的:
enyaitl33#
This Only Contains standard Arabic symbols range但波斯语也包括4更多字符:
所以你应该用途:
如果你想匹配Zero-width-non-joiner,你也应该添加这个:
olmpazwi4#
TL;DR
所有说使用
\u0600-\u06FF
或[آ-ی]
的答案都是错误的。即
\u0600-\u06FF
包含的字符比您需要的多209个!它也包括数字!波斯语必须使用的字符集如下:
^[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$
表示字母。^[۰۱۲۳۴۵۶۷۸۹]+$
表示数字。[ ٌ ًّ َ ِ ُ ْ ]
表示元音。或者是这些的结合。您可能需要添加其他阿拉伯字母,如Hamza
ء
到您的字符集。这个答案的存在是为了纠正一个常见的误解。代码点
0600
到06FF
不表示**Persian / Farsi alphabet**([آ-ی]
也不表示):255个字符落在这个范围内,波斯语字母表有32个字母,除了数字的波斯语演示,它将是42。如果我们添加元音(最初是阿拉伯元音,在波斯语中很少使用)和Tanvin(
ً
,ٍِ
,ٌ
)和Tashdid(ّ
),它们都是阿拉伯变音符号的子集,而不是波斯语,我们将以46个字符结束。这意味着:\u0600-\u06FF
包含的字符比您需要的多209个!带有代码点
06F7
的۷
是数字7
的波斯语表示,带有代码点0667
的٧
是同一数字的阿拉伯语表示。۶
是数字6
的波斯语表示,٦
是同一数字的阿拉伯语表示。所有这些都驻留在0600
到06FF
代码点中。波斯数字4(
۴
)、5(۵
)和6(۶
)的形状与阿拉伯语中使用的形状不同,其他数字具有不同的码位。你可以看到不同数量的其他字符,不存在于波斯语/波斯语太,没有人愿意有他们,而验证一个名字或姓氏。
[آ-ی]
也包含117个字符,这比验证所需的字符多得多。你可以看到他们都使用**Unicode CLDR**。ua4mk5z45#
我在程序中使用了这个RegExp,它工作正常。希望能帮到你:
cwxwcias6#
波斯语字符在以下范围内:[\u0600-\u06FF] + [\s]
试试看:
此图案包含字母和空格字符。
yv5phkfx7#
我在程序中使用这两个正则表达式,因为有些字母实际上可能是阿拉伯语:
它可能看起来不太好,但它在我的代码中运行良好。