Chr*_*ine 1 ruby regex sinatra
我正在尝试创建一个小的sinatra示例,它将打印一个月,日或年的日历视图,具体取决于URL.这样
localhost:4567/calendar/2012将打印年视图日历
localhost:4567/calendar/2012/9将打印一个月的日历
localhost:4567/calendar/2012/9/15将打印日视图日历
我有这个工作:
require 'sinatra'
get '/calendar/:year/:month/:day/?' do
"printing daily calendar for #{params[:year]}/#{params[:month]}/#{params[:day]}"
end
get '/calendar/:year/:month/?' do
"printing monthly calendar for #{params[:year]}/#{params[:month]}"
end
get '/calendar/:year/?' do
"printing yearly calendar for #{params[:year]}"
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,我是否可以使用某种RegEx进一步优化这些路由,以便我可以说如果:month部分在1到12之间并且:day部分在1到31之间,则仅计算url?
如果您使用的是ruby 1.9+,则可以使用这样的命名捕获:
get %r{/(?<year>\d{4})/(?<month>\d{2})/(?<day>\d{2})/?} do
"printing daily calendar for #{params[:year]}/#{params[:month]}/#{params[:day]}"
end
get %r{/(?<year>\d{4})/(?<month>\d{2})/?} do
"printing monthly calendar for #{params[:year]}/#{params[:month]}"
end
get %r{/(?<year>\d{4})/?} do
"printing monthly calendar for #{params[:year]}"
end
Run Code Online (Sandbox Code Playgroud)