我正在使用以下正则表达式:
[RegularExpression(@"^[A-Za-z0-9äöüÄÖÜß]+(?:[\._-äöüÄÖÜß][A-Za-z0-9]+)*$", ErrorMessageResourceName = "Error_User_UsernameFormat", ErrorMessageResourceType = typeof(Properties.Resources))]
现在我想以德国元音(äöüÄÖÜß)的方式改进它。
答案 0 :(得分:0)
您将德语字母添加到正则表达式的方式,只能在第一个单词中使用德语字母。
您需要将字母放入最后一个字符类:
@"^[A-Za-z0-9äöüÄÖÜß]+(?:[._-][A-Za-z0-9äöüÄÖÜß]+)*$"
^^^^^^^
请参阅build restore nuget package
另请注意,_-ä
在字符类中创建了一个范围,该范围与_
,-
和ä
不匹配(甚至不匹配) -
因为它不在范围内。)
请注意,如果您仅在服务器端验证,并且想要匹配任何Unicode字母,您也可以考虑使用
@"^[\p{L}0-9]+(?:[._-][\p{L}0-9]+)*$"
\p{L}
匹配任何Unicode字母。编写[\p{L}0-9]
的另一种方法是[^\W_]
,但在.NET中,它也会匹配所有Unicode数字,而0-9
只匹配ASCII数字。
答案 1 :(得分:0)
将[A-Za-z0-9äöüÄÖÜß]
替换为[\w]
。 \w
已包含元音变音。
答案 2 :(得分:0)
效果更好,我只是修改了别人的代码,并将其发布在Stackoverflow上。这适用于德语编码。 我刚刚添加了此代码(c> ='Ä'&& c <='ä'),现在它可以满足我的需求。并非所有德语字母都受支持,您需要创建自己的(c> ='Ö'&& c <='ö')类型以添加您遇到问题的字母。
public static string RemoveSpecialCharacters(this string str)
{
StringBuilder sb = new StringBuilder();
foreach (char c in str)
{
if ((c >= '0' && c <= '9') || (c >= 'Ö' && c <= 'ö') || (c >= 'Ü' && c <= 'ü') || (c >= 'Ä' && c <= 'ä') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == ' ')
{
sb.Append(c);
}
}
return clean(sb);
}