我有一个asp.net控件,它使用正则表达式来验证用户输入的名字和姓氏。它适用于多达40个字符......我认为通过表达式的外观,它也允许'像O'Donald这样的名字,也可能是夸张的名字。
ValidationExpression="^[a-zA-Z''-'\s]{1,40}$"
我的问题是带有重音的名字/字符,例如不允许包含例如ñ的西班牙语和法语名称。有谁知道如何修改我的表达式以考虑到这一点?
答案 0 :(得分:7)
你想要
\ p {L}:任何语言的任何一种信件。
\p{L}
或\pL
是unicode表中具有"字母"属性的每个字符。所以它将匹配unicode表中的每个字母。
你可以在你的角色类中使用它,就像这样
ValidationExpression="^[\p{L}''-'\s]{1,40}$"
工作C#测试:
String[] words = { "O'Conner", "Smith", "Müller", "fooñ", "Fooobar12" };
foreach (String s in words) {
Match word = Regex.Match(s, @"
^ # Match the start of the string
[\p{L}''-'\s]{1,40}
$ # Match the end of the string
", RegexOptions.IgnorePatternWhitespace);
if (word.Success) {
Console.WriteLine(s + ": valid");
}
else {
Console.WriteLine(s + ": invalid");
}
}
Console.ReadLine();