ASP.NET 路由中的多语言正则表达式

3

我需要编写一个正则表达式,用于asp.net路由约束,可以匹配任何单词。问题是单词可能用任何语言书写,例如:

  1. test
  2. some-other-test
  3. one-more-трудно-получить-result

感谢您的帮助。

1个回答

2

如果我理解正确,您想匹配一个包含某个词的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}用于不可见控制字符和未使用的代码点。

资源: http://www.regular-expressions.info/unicode.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接