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

时间:2012-05-12 06:30:02

标签: c# regex asp.net-mvc-3 model-view-controller

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

6 个答案:

答案 0 :(得分:20)

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

尝试:

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

答案 1 :(得分:17)

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

"^[آ-ی]$"

答案 2 :(得分:14)

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

此仅包含标准阿拉伯符号范围但波斯语还包括4个以上字符:

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

所以你应该使用:

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

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

\u200C

答案 3 :(得分:7)

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

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

答案 4 :(得分:4)

TL; DR

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

  

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

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

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

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

  • [ ‬ٌ ‬ًّ ‬َ ‬ِ ‬ُ ‬ْ ‬]用于元音。

或者那些联盟。您可能希望将其他阿拉伯字母(如Hamza ء)添加到您的字符集中。

这个答案的存在是为了解决一个常见的误解。代码点060006FF不代表 Persian / Farsi alphabet [آ-ی]也没有):

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

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

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

带有代码点۷

06F7是数字7的波斯语表示,٧代码点0667是相同数字的阿拉伯语表示。 ۶是数字6的波斯语表示,٦是相同数字的阿拉伯语表示。所有这些都位于060006FF代码点。

  

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

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

[آ-ی]也包含117个字符,远远超出了验证所需的字符数。您可以使用 Unicode CLDR 查看所有内容。

答案 5 :(得分:0)

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

尝试:

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

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