正则表达式中的Unicode字符

Kev*_*Kev 7 .net c# regex

我有一个正则表达式:

return Regex.IsMatch(_customer.FirstName, @"^[A-Za-z][A-Za-z0-9@#%&\'\-\s\.\,*]*$");
Run Code Online (Sandbox Code Playgroud)

现在,一些客户对他们的姓氏或名字中的元音进行了fada,如下所示: Brendán

注意:在一个你可以通过按住得到发达alt,ctrl然后按a.

我已经尝试将这些字符添加到正则表达式中,但是当程序尝试编译时出现错误.

我可以允许用户输入具有fada的这种字符的唯一方法是完全删除正则表达式,这意味着用户可以输入他们想要的任何内容.

有没有办法使用上面的表达式,并以某种方式允许以下字符?

á
é
í
ó
ú
Run Code Online (Sandbox Code Playgroud)

hwn*_*wnd 14

仅供参考,您不需要',.在角色类中转义上述内容[],并且可以-通过将其放置在角色类的开头或结尾来避免逃脱破折号.

您可以使用\p{L}哪种匹配来自任何语言的任何类型的字母.请参阅以下示例:

string[] names = { "Brendán", "Jóhn", "Jason" };
Regex rgx      = new Regex(@"^\p{L}+$");
foreach (string name in names)
    Console.WriteLine("{0} {1} a valid name.", name, rgx.IsMatch(name) ? "is" : "is not");

// Brendán is a valid name.
// Jóhn is a valid name.
// Jason is a valid name.
Run Code Online (Sandbox Code Playgroud)

或者只是将所需的字符添加到[]要包含的角色类中.

@"^[a-zA-Z0-9áéíóú@#%&',.\s-]+$"
Run Code Online (Sandbox Code Playgroud)


AFr*_*eze 8

尝试合并\p{L}将匹配unicode"字母".所以a,á应该匹配\p{L}.

祝好运!


Nic*_*rey 5

要扩展正则表达式以包含带有锐音符 ( fada ) 的元音,您可以使用 Unicode 代码点。您需要了解这些 un​​icode 块:

\n\n\n\n

更多 Unicode 代码图表位于http://www.unicode.org/charts/index.html#scripts,涵盖 Latin Extended-B、-C 和 -D 以及 Latin Extended-Addional(应该涵盖几乎所有欧洲语言)其全部)。

\n\n

所以,我们看到爱尔兰的fada元音是

\n\n
    \n
  • \xc3\x81\\u00C1; \xc3\xa1\\u00E1
  • \n
  • \xc3\x89\\u00C9; \xc3\xa9\\u00E9
  • \n
  • \xc3\x8d\\u00CD; \xc3\xad\\u00ED
  • \n
  • \xc3\x93\\u00D3; \xc3\xb3\\u00F3
  • \n
  • \xc3\x9a\\u00DA; \xc3\xba\\u00FA
  • \n
\n\n

因此你的正则表达式需要扩展:

\n\n
Regex rx = new Regex( @"^[A-Za-z\\u00C1\\u00C9\\u00CD\\u00D3\\u00DA\\u00E1\\u00E9\\u00ED\\u00F3\\u00FA][A-Za-z\\u00C1\\u00C9\\u00CD\\u00D3\\u00DA\\u00E1\\u00E9\\u00ED\\u00F3\\u00FA0-9@#%&\\\'\\-\\s\\.\\,*]*$");\n
Run Code Online (Sandbox Code Playgroud)\n