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

Sae*_*eid 32 c# regex model-view-controller asp.net-mvc-3

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

Tot*_*oto 21

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

尝试:

Regex.IsMatch(value, @"^[\u0600-\u06FF]+$")
Run Code Online (Sandbox Code Playgroud)

  • `[\ u0600-\u06FF\uFB8A\u067E\u0686\u06AF]`更好.见http://stackoverflow.com/a/22565376/896465 (5认同)

Sae*_*eid 20

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

"^[?-?]$"
Run Code Online (Sandbox Code Playgroud)

  • 没有任何波斯字符可以像"خ","پ",...因为这不是阿拉伯语!我觉得更好用:[\ u0600-\u06FF] (4认同)

Moh*_*egh 14

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

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

? \uFB8A
? \u067E
? \u0686
? \u06AF
Run Code Online (Sandbox Code Playgroud)

所以你应该使用:

^[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF]+$
Run Code Online (Sandbox Code Playgroud)

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

\u200C
Run Code Online (Sandbox Code Playgroud)

  • 考虑接受字符中的空格和零宽度非连接!/sf/answers/2440857821/ (2认同)

Ang*_*gel 9

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

 [?????????????????????????????????????????????\s]+$
Run Code Online (Sandbox Code Playgroud)


rev*_*evo 5

TL; DR

所有表明使用\u0600-\u06FF[?-?]完全错误的答案。

\u0600-\u06FF包含209个多余的字符!它也包括数字!

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

  • 使用^[?????????????????????????????????]+$的字母。

  • 使用^[??????????]+$的号码。

  • 使用[ ?? ??? ?? ?? ?? ?? ?]元音。

或这些的结合。您可能需要?在字符集中添加其他阿拉伯字母,例如Hamza 。


存在此答案以解决常见的误解。代码点0600通过06FF不表示波斯语/波斯语字母(同样没有[?-?]):

[\u0600-\u0605 ?-?\u061C? ?-\u06DD ?-? ? ? ?-? ?-? ? ?-? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?-? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-? ? ? ? ?-? ? ? ? ?-? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ?-? ? ? ? ? ? ?-? ? ? ? ?-? ?? ? ?-? ? ? ? ?-? ? ?? ?? ?
?-? ? ?-? ? ? ?? ? ?-? ? ? ?-? ? ? ? \u061D]
Run Code Online (Sandbox Code Playgroud)

255个字符是堕落在这个范围内,波斯语字母表有32个字母,除了数字波斯语示范这将是42.如果我们增加元音(阿拉伯语元音原来,在波斯语很少使用)和Tanvin??? ?? ?)和Tashdid? ?),它们都是阿拉伯音素符号而不是波斯字母符号的子集,我们以46个字符结尾。这意味着:

\u0600-\u06FF 包含209个多余的字符!

?与编码点06F7是数字的波斯语表示7?与代码点0667是相同数量的阿拉伯表示。?是数字的波斯表示,6并且?是相同数字的阿拉伯表示。所有都0600通过06FF代码点驻留。

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

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

[?-?]还包括117个字符,这远远超出了验证所需的字符。您可以使用Unicode CLDR看到它们。