.net Regular Expression可以匹配任何语言的任何类型的字母

ped*_*dro 9 .net regex unicode data-annotations asp.net-mvc-2

我可以使用哪种正则表达式来匹配(允许)来自任何语言的任何类型的字母

我需要匹配任何字母,包括任何变音符号(例如á,ü,ñ等),并排除任何类型的符号(数学符号,货币符号,装饰符号,框图字符等)和标点字符.

我正在使用带有.net 4的asp.net MVC 2.我在我的视图模型中尝试过这个注释:

[RegularExpression(@"\p{L}*", ...
Run Code Online (Sandbox Code Playgroud)

还有这个:

[RegularExpression(@"\p{L}\p{M}*", ...
Run Code Online (Sandbox Code Playgroud)

但客户端验证不起作用.

更新: 感谢您的所有答案,您的建议工作,但仅适用于.net,这里的问题是它还使用正则表达式进行客户端验证与JavaScript(抱歉,如果这还不够清楚).我不得不去:

[!?^ 0-9_\|°¬#\ $%/ \()\¡¿+ {} []:\; @ª^*<> =&]*

这是非常丑陋的,并不涵盖所有场景,但最接近我需要的东西.

Gre*_*con 5

忽略你的语法老师并使用双底片:

[^\W\d_]
Run Code Online (Sandbox Code Playgroud)

请记住,\w匹配任何字母,数字或下划线,因此请将它们排除在上面.你可能会把它读作"不是一个字的字符,而不是一个数字,而不是一个下划线" - 只留下字母.应用DeMorgan的定理,它更有意义:"一个单词字符,但既不是数字也不是下划线."


Kob*_*obi 5

您可以使用Char.IsLetter

指示指定的 Unicode 字符是否归类为 Unicode 字母。

使用 .Net 4.0:

string onlyLetters = String.Concat(str.Where(Char.IsLetter));
Run Code Online (Sandbox Code Playgroud)

在 3.5 上String.Concat只有一个数组除外,所以你也应该调用ToArray.


Gre*_*reg 1

需要注意的一件事是客户端正则表达式。它在客户端使用 javascript 正则表达式,在服务器端使用 .net 正则表达式。JavaScript 不支持这种情况。