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

本文关键字:波斯语 正则表达式 检查 输入 字符串 用于 | 更新日期: 2023-09-27 18:34:07

我在MVC工作,我是新手。我想通过[RegularExpression]验证检查输入值是否只有波斯语(字符(。 所以我认为使用正则表达式并需要检查 unicode 的范围,但我不知道如何找到波斯字符 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]+$

如果你想匹配零宽度非连接者,你也应该添加这个:

'u200C

TL;DR

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

'u0600-'u06FF包含比您需要的多 209 个字符!它还包括数字!

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

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

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

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

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


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

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

表有32个字母,除了波斯语的数字演示之外,它将是42个。如果我们加上元音(最初是阿拉伯语元音,在波斯语中很少使用(和Tanvin(ًٍِ ‬ٌ ‬(和Tashdid(ّ ‬(,它们都是阿拉伯语变音符号的子集而不是波斯语,我们将以46个字符结尾。这意味着:

'u0600-'u06FF包含比您需要的多 209 个字符!

带有代码点06F7 ۷是数字 7 的波斯语表示形式,带有代码点0667 ٧是相同数字的阿拉伯语表示形式。 ۶是数字6的波斯语表示,٦是相同数字的阿拉伯语表示。所有这些都通过06FF代码点驻留在0600中。

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

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

[آ-ی]也包括 117 个字符,这比某人验证所需的字符要多得多。您可以使用Unicode CLDR查看它们。

我在程序中使用此正则表达式,并且可以正常工作。 希望对您有所帮助:

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

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

尝试:

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

这个父亲包含字母和空格字符。