【发布时间】:2011-08-19 17:26:45
【问题描述】:
我需要编写正则表达式,用于 asp.net 路由约束,它应该匹配任何单词。问题是单词可以用任何语言书写,例如
- 测试
- 其他测试
- one-more-трудно-получить-结果
谢谢帮助。
【问题讨论】:
标签: asp.net regex unicode routing multilingual
我需要编写正则表达式,用于 asp.net 路由约束,它应该匹配任何单词。问题是单词可以用任何语言书写,例如
谢谢帮助。
【问题讨论】:
标签: asp.net regex unicode routing multilingual
如果我的理解正确,您想匹配一个包含单词的网址并将其传递给您的路线,但该单词可能是多种语言。
默认情况下,Asp.net MVC 路由适用于任何语言。例如这样的路线:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" }
);
将匹配类似“/controller/action/one-more-трудно-получить-result”的网址。 ID 参数将保存值“one-more-трудно-получить-result”。
如果您希望限制路线,使其仅匹配来自任何语言的单词(无数字),那么这是您的正则表达式:
[\p{L}\p{M}-]+
下面是你将如何路由它:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "default" },
new { id = @"[\p{L}\p{M}-]+" }
);
\p{L} 将匹配来自任何语言的任何类型的字母。 \p{M} 将匹配任何打算与另一个字符组合的字符(例如重音符号、变音符号、封闭框等)。此路由将匹配类似“/controller/action/one-more-трудно-получить-result”的网址,但不匹配“/controller/action/one-more-трудно-по12341лучить-result”。
仅供参考,\p{N} 用于匹配任何数字,\p{P} 用于标点符号,而 \p{C} 用于匹配不可见的控制字符和未使用的代码点。
【讨论】: