我需要编写一个正则表达式,用于asp.net路由约束,可以匹配任何单词。问题是单词可能用任何语言书写,例如:
- test
- some-other-test
- one-more-трудно-получить-result
感谢您的帮助。
我需要编写一个正则表达式,用于asp.net路由约束,可以匹配任何单词。问题是单词可能用任何语言书写,例如:
感谢您的帮助。
如果我理解正确,您想匹配一个包含某个词的url并将其传递给您的路由,但该词可能是多种语言。
默认情况下,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”的url。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”。
只是一个FYI,\p{N}用于匹配任何数字,\p{P}用于标点符号,\p{C}用于不可见控制字符和未使用的代码点。