正则表达式应该允许C#中的德语变音符号

时间:2017-04-06 08:03:09

标签: regex c#-4.0

我正在使用以下正则表达式:

    [RegularExpression(@"^[A-Za-z0-9äöüÄÖÜß]+(?:[\._-äöüÄÖÜß][A-Za-z0-9]+)*$", ErrorMessageResourceName = "Error_User_UsernameFormat", ErrorMessageResourceType = typeof(Properties.Resources))]

现在我想以德国元音(äöüÄÖÜß)的方式改进它。

3 个答案:

答案 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);
    }