【问题标题】:Regex for asp.net routing in multiple languages正则表达式用于多种语言的 asp.net 路由
【发布时间】:2011-08-19 17:26:45
【问题描述】:

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

  1. 测试
  2. 其他测试
  3. one-more-трудно-получить-结果

谢谢帮助。

【问题讨论】:

    标签: asp.net regex unicode routing multilingual


    【解决方案1】:

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

    默认情况下,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} 用于匹配不可见的控制字符和未使用的代码点。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2019-02-10
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多