【问题标题】:CodeIgniter Route - regex matches everythingCodeIgniter Route - 正则表达式匹配所有内容
【发布时间】:2017-03-18 16:05:59
【问题描述】:

我已经很久没有使用 CI 编码了,我想重写一些我之前的路由,使其更加动态。

由于某种原因,我添加的这个正则表达式匹配所有内容,我不知道为什么。

$route['([a-z]+-[a-z]+)'] = 'Main/example_function/$1';

它匹配所有其他尚未分配的路由,即使有多个片段。匹配的路由示例:

example.com/aaaaa
example.com/aaaaa-asd
example.com/aaaaa/aaaa

我只需要它专门匹配这种风格的路线:

example.com/aaaaa-aaaaa

我在不同的路径中有其他正则表达式,但格式为 example.com/test/([a-z]+),它们工作正常。

将它放在所有其他声明的路由之后不是一种选择,因为并非所有路由都在那里声明。

提前致谢!

【问题讨论】:

  • 使用@SahilGulati 提出的规则并将该规则放在最后 - 作为最后一条规则。
  • @Tpojka 正如我解释的那样,它是否是最后一条规则并不重要(我目前将它作为最后一条规则),因为并非所有内容都在那里声明。
  • CI 路由器正在通过斜杠(段)解析 url。尽管您有简洁的正则表达式规则,但它仍然是一个段,明智的做法是在 2 条以上分段路线之后保留它。

标签: regex codeigniter routes


【解决方案1】:

你需要这个吗...

正则表达式:^example\.com\/[a-z]+\-[a-z]+$

Regex demo

【讨论】:

    【解决方案2】:

    感谢 Sahil Gulati 的回答,我发现了错误。正确的正则表达式是:

    $route['([a-z]+\-[a-z]+)'] = 'Main/example_function/$1';
    

    它会正确匹配我想要的

    谢谢!

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2016-04-30
      • 2012-10-31
      • 2018-07-18
      • 1970-01-01
      相关资源
      最近更新 更多