用于多种语言的 ASP.NET 路由的正则表达式

发布于 2024-11-30 11:46:03 字数 172 浏览 0 评论 0原文

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

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

谢谢帮助。

I need to write regex which I will use for asp.net routing constraint which should match any word. The problem is that words could be written in any language, for example

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

Thx for help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゃ人海孤独症 2024-12-07 11:46:03

如果我理解正确的话,您想要匹配一个包含单词的网址并将其传递给您的路线,但该单词可能有多种语言。

默认情况下,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”的 url,但不匹配“/controller/action/one-more-трудно-по12341лучить-result”。

仅供参考,\p{N} 用于匹配任何数字,\p{P} 用于匹配标点符号,\p{C} 用于匹配不可见的控制字符和未使用的代码点。

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

If I'm understanding correctly, you want to match a url that has a word in it and pass that to your route, but the word could be in multiple languages.

By default an Asp.net MVC Route will work with any language. For example a route like this:

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = "" } 
            );

Will match a url like "/controller/action/one-more-трудно-получить-result". The ID parameter will hold the value "one-more-трудно-получить-result".

If you are looking to limit the route so it only matches words (no numbers) from any language then here is your regex:

[\p{L}\p{M}-]+

And here is how you would route this:

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = "default" },
            new { id = @"[\p{L}\p{M}-]+" }
        );

The \p{L} will match any kind of letter from any language. The \p{M} will match any character intended to be combined with another character (e.g. accents, umlauts, enclosing boxes, etc.). This route will match a url like "/controller/action/one-more-трудно-получить-result" but not "/controller/action/one-more-трудно-по12341лучить-result".

Just an FYI the \p{N} is used to match any number, \p{P} is for punctuation, and \p{C} if for invisible control characters and unused code points.

Resources:
http://www.regular-expressions.info/unicode.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文