我可以使用哪种正则表达式来匹配(允许)来自任何语言的任何类型的字母
我需要匹配包括任何变音符号在内的任何字母(例如á,ü,ñ等) 并排除任何类型的符号(数学符号,货币符号,装饰符号,方框字符等)和标点字符。
我正在使用带有.net 4的asp.net MVC 2.我在我的视图模型中尝试过这个注释:
[RegularExpression(@"\p{L}*", ...
和这一个:
[RegularExpression(@"\p{L}\p{M}*", ...
但客户端验证不起作用。
更新 感谢您的所有答案,您的建议只适用于.net,这里的问题是它还使用正则表达式进行客户端验证(如果这还不够清楚,请对不起)。 我不得不去:
[^ 0-9_ \ |°¬#\ $%/ \()\¡¿+ {} []:?\; @ª^ *<> =&安培;] *
这是非常丑陋的,并不涵盖所有场景,但最接近我需要的东西。
答案 0 :(得分:5)
忽略你的语法老师并使用双底片:
[^\W\d_]
请记住,\w
匹配任何字母,数字或下划线,因此请将它们排除在上面。你可能会把它读作“不是一个字的字符,而不是一个数字,而不是一个下划线” - 只留下字母。应用DeMorgan的定理,它更有意义:“一个单词字符,但既不是数字也不是下划线。”
答案 1 :(得分:4)
您可以使用Char.IsLetter
:
指示指定的Unicode字符是否归类为Unicode字母。
使用.Net 4.0:
string onlyLetters = String.Concat(str.Where(Char.IsLetter));
在3.5 String.Concat
上只有一个数组,所以你也应该调用ToArray
。
答案 2 :(得分:2)
你的问题更可能是你只需要一个 alpha-char,因为正则表达式将匹配至少有一个char的任何东西。
通过添加^
作为前缀和$
作为后缀,整个句子应符合您的正则表达式。所以这个问题有效:
^\p{L}*$
Regexbuddy解释说:
^
断言字符串开头的位置\p{L}
具有Unicode属性“letter”的字符(来自任何类型语言的任何类型的字母)
2A。在零和无限次之间,尽可能多(贪婪)$
断言字符串末尾的位置答案 3 :(得分:1)
\p{L}*
应匹配“任何语言的任何类型的信件”。它应该工作,我在.NET中的i18n-proof uppercase/lowercase recognition regex中使用它。
答案 4 :(得分:1)
需要注意的一点是客户端正则表达式。它在客户端使用javascript正则表达式,在服务器端使用.net正则表达式。 Javascript不支持此方案。
答案 5 :(得分:1)
我只需要验证一个URL,然后在.NET中选择了这个正则表达式。
^[(\p{L})?(\p{M})?-]*$
以任何语言的字符开头和结尾(可选择字母或标记)并允许连字符。
答案 6 :(得分:0)
\ w - 匹配任何字母数字字符(包括数字)
在我的测试中它符合:
并且未匹配:
如果您确切地知道要排除的内容(如小清单),请执行以下操作:
[^;,\`]
一次匹配任何不符合的字符:
希望它有所帮助!
答案 7 :(得分:0)
将正则表达式选项设置为无贪婪(懒惰)。
/\p{L}/u