正则表达式中的 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,您可以通过按住 alt、ctrl 然后按 a 来获得。
我尝试将这些字符添加到正则表达式中,但是当程序尝试编译时出现错误。
我允许用户使用 fada 输入此类字符的唯一方法是完全删除正则表达式,这意味着用户可以输入他们想要的任何内容。
有没有办法使用上面的表达式并以某种方式允许以下字符?
á
é
í
ó
ú
仅供参考,您不需要在字符类[]
中转义上述',.
,并且可以通过将其放置在字符类的开头或结尾来避免转义破折号-
。
您可以使用与任何语言的任何类型的字母匹配的'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'.',ñáéíóúü]+$");