用于检查输入字符串的正则表达式是用波斯语

我和MVC一起工作,我是新手。 我想通过[RegularExpression]validation检查输入值仅在波斯语(字符)中。 所以我认为使用正则表达式需要检查unicodes的范围,但我不知道如何找到范围的波斯字符Unicode。 我对这个正则表达式是对的吗? 你的建议是什么?如何在波斯语中找到Unicode的范围

波斯字符在以下范围内: [\u0600-\u06FF]

尝试:

 Regex.IsMatch(value, @"^[\u0600-\u06FF]+$") 

检查波斯语中的第一个字母和最后一个字母范围我认为是这样的:

 "^[آ-ی]$" 
 Regex.IsMatch(Text, @"^([\u0600-\u06FF]+\s?)+$") 

这仅包含标准阿拉伯符号范围但波斯语还包括4个更多字符:

 ژ \uFB8A پ \u067E چ \u0686 گ \u06AF 

所以你应该使用:

 ^[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF]+$ 

如果你想匹配Zero-width-non-joiner,你也应该添加它:

 \u200C 

我在我的程序中使用这个RegExp,它可以正常工作。 希望能帮到你:

  [پچجحخهعغفقثصضشسیبلاتنمکگوئدذرزطظژؤآإأءًٌٍَُِّ\s]+$ 

TL; DR

所有使用\u0600-\u06FF[آ-ی]答案都是错误的。

ie \u0600-\u06FF包含超过你需要的209个字符! 它也包括数字!

波斯语必须使用的字符集如下:

  • 使用^[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$作为信件。

  • 使用^[۰۱۲۳۴۵۶۷۸۹]+$代表数字。

  • 使用[ ‬ٌ ‬ًّ ‬َ ‬ِ ‬ُ ‬ْ ‬]作为元音。

或者那些联盟。 您可能还想在其他字符集中添加其他阿拉伯字母,如Hamza ء


这个答案的存在是为了解决一个常见的误解。 代码点060006FF不表示波斯语/波斯语字母表[آ-ی]也不表示):

 [\u0600-\u0605 ؐ-ؚ\u061Cـ ۖ-\u06DD ۟-ۤ ۧ ۨ ۪-ۭ ً-ٕ ٟ ٖ-ٞ ٰ ، ؍ ٫ ٬ ؛ ؞ ؟ ۔ ٭ ٪ ؉ ؊ ؈ ؎ ؏ ۞ ۩ ؆ ؇ ؋ ٠۰ ١۱ ٢۲ ٣۳ ٤۴ ٥۵ ٦۶ ٧۷ ٨۸ ٩۹ ءٴ۽ آ أ ٲ ٱ ؤ إ ٳ ئ ا ٵ ٮ ب ٻ پ ڀ ة-ث ٹ ٺ ټ ٽ ٿ ج ڃ ڄ چ ڿ ڇ ح خ ځ ڂ څ د ذ ڈ-ڐ ۮ ر ز ڑ-ڙ ۯ س ش ښ-ڜ ۺ ص ض ڝ ڞ ۻ ط ظ ڟ ع غ ڠ ۼ ف ڡ-ڦ ٯ ق ڧ ڨ ك ک-ڴ ػ ؼ ل ڵ-ڸ م۾ ن ں-ڽ ڹ ه ھ ہ-ۃ ۿ ەۀ وۥ ٶ ۄ-ۇ ٷ ۈ-ۋ ۏ ى يۦ ٸ ی-ێ ې ۑ ؽ-ؿ ؠ ے ۓ \u061D] 

在此范围内有255个字符,波斯语字母表有32个字母,除了波斯语数字显示之外,还有42个字母。如果我们添加元音(阿拉伯语元音最初,很少用于波斯语)和Tanvinٍِ ‬ ٌ ‬Tashdidّ ‬都是阿拉伯语变音符号的一部分,而不是波斯语,我们以46个字符结束。 这意味着:

\u0600-\u06FF包含超过您需要的209个字符!

۷代码点06F77٧的波斯语表示,代码点06F7是相同数字的阿拉伯语表示。 ۶是波斯语表示的数字6٦是阿拉伯语表示相同的数字。 并且都位于060006FF代码点。

波斯数字四( ۴ ),五( ۵ )和六( ۶ )的形状与阿拉伯语中使用的形状不同,其他数字具有不同的代码点。

您可以看到在波斯语/波斯语中也不存在的其他数量不同的人物,并且在validation名字或姓氏时没有人愿意拥有它们。

[آ-ی]包含117个字符,远远超过某人validation所需的字符。 您可以使用Unicode CLDR查看它们。

波斯字符在以下范围内:[\ u0600- \ u06FF] + [\ s]

尝试:

 Regex.IsMatch(Text, @"^([\u0600-\u06FF]+\s?)+$") 

这个Patern包含字母和空间Charachters。