正则表达式中的 Unicode 字符

本文关键字:字符 Unicode 正则表达式 | 更新日期: 2024-10-18 21:36:35

我有一个正则表达式:

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

现在,一些客户在他们的姓氏或名字的元音上有一个法达,如下所示:Brendán

请注意 a 上方的 fada,您可以通过按住 altctrl 然后按 a 来获得。

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

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

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

á
é
í
ó
ú

正则表达式中的 Unicode 字符

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

您可以使用与任何语言的任何类型的字母匹配的'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.

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

@"^[a-zA-Z0-9áéíóú@#%&',.'s-]+$"

尝试合并'p{L},这将匹配Unicode"字母"。所以aá应该与'p{L}比赛.

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

  • C0 控件和基本拉丁语
  • C1 控件和拉丁语-1 补充
  • 可能还有拉丁语扩展 A

http://www.unicode.org/charts/index.html#scripts 有更多的Unicode代码图表,涵盖拉丁语扩展B,-C和-D以及拉丁语扩展-Addional(应该涵盖几乎所有欧洲语言(。

所以,我们看到爱尔兰法达元音是

  • Á'u00C1; á 'u00E1
  • É'u00C9; é 'u00E9
  • Í'u00CD; í 'u00ED
  • Ó'u00D3; ó 'u00F3
  • Ú 'u00DA; ú 'u00FA

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

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'.',*]*$");

'w(单词字符(包含 unicode 字符。

所以你的表达可以是:

@"^'w['w0-9@#%&'''-'s'.',*]*$"

(将A-Za-z替换为'w(

尝试如下。它将帮助您...

return Regex.IsMatch(_customer.FirstName, @"^[0-9A-Za-z@#%&'''-'s'.',ñáéíóúü]+$");