2012-11-04 9 views
11

Ho la seguente percorso:Rails itinerario personalizzato con vincoli - personaggi di ancoraggio espressioni regolari non sono accettati in requisiti di routing

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

che produce l'errore:

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

Così l'ho capito il carattere^non è permesso, ma non sono sicuro di quale carattere stia producendo questo particolare errore di routing.

risposta

10

In regex abbiamo due ancore:

  1. Inizio della linea/string ^
  2. Fine linea/string $

tenta di rimuovere $ dal modello e si dovrebbe essere buono per andare ...

+4

Ci sono anche '\ A' e' \ Z' di quelli che conosco. – rausch

+1

@rausch - In generale, nelle espressioni regolari è meglio continuare a utilizzare il punto di omissione e il dollaro per questo scopo. Alcuni ambienti (JavaScript, POSIX, XML) non supportano '\ A' e' \ Z'. –

+0

@ Ωmega In Ruby non dovresti farlo; raggiungere sempre per '^' e '$' potrebbe portare a vulnerabilità della sicurezza: http://homakov.blogspot.ru/2012/05/saferweb-injects-in-various-ruby.html http://guides.rubyonrails.org /security.html#regular-expressions –