14

我有以下路线:

  get 'users/:user_id/:name', to: 'profiles#show',
    :constraints => { :name => /[a-zA-Z0-9_]+$/ }, as: 'user_profile'

这会产生错误:

Regexp anchor characters are not allowed in routing requirements: /[a-zA-Z0-9_]+$/

所以我知道 ^ 字符是不允许的,但不确定是什么字符产生了这个特定的路由错误。

4

2 回答 2

18

正则表达式锚是^and $,但它们在这里没有任何作用。“(Y)你不需要使用锚点,因为所有路线都在开始时锚定。” .

所以约束:

:constraints => { :name => /[a-zA-Z0-9_]+/ }

会做你想做的 - 确保名称由 1 个或多个这些字符组成,仅此而已。顺便说一句,您可以简化正则表达式:

:constraints => { :name => /\w+/ }
于 2013-04-12T12:23:48.777 回答
13

在正则表达式中,我们有两个锚点:

  1. 行/字符串的开头^
  2. 行尾/字符串$

尝试$从模式中删除,你应该很高兴......

于 2012-11-04T20:14:46.387 回答