我正在使用Rails和MongoMapper作为我的工作平台。
我想在月份和年份的帮助下生成自定义键。可能的格式为YYYYMM####
,
YYYY
是当前年份,我可以Date.today.strftime("%Y")
MM
是当前月份,我可以Date.tody.strftime("%m")
获取
###
增加整数值我用代码
获得了最后一份工作jobForLastnum = Job.last(:order => :_id.desc)
lastJobNum = jobForLastnum.job_number
现在我的问题是我收到的job_number
为'201305100'
我想将其拆分为自定义长度,例如['2013','05','100']
我知道如何在ruby中拆分字符串并且我成功地做了但是我得到了像
那样的单个字符的结果['2','0','1','3','0','5','1','0','0']
借助于此,我可以找回年份:
lastJobNum.to_s[0,4]
借助于此,我得到了月份:
lastJobNum.to_s[4,2]
但之后有自定义长度字符串。如何在一个阵列中获取所有数据?
答案 0 :(得分:3)
您可以简单地使用范围:
c = "2013121003"
[c[0..3], c[4..5], c[6..-1]]
您还可以使用String#unpack
:
"20131210034".unpack("A4A2A*")
或者使用String#scan
c = "2013121003"
c.scan(/(\d{4})(\d{2})(\d+)/)
在所有情况下,这将返回一个数组,其中年,月和作业ID为字符串。
答案 1 :(得分:1)
正则表达式可以帮到你。
jobNumber = 201305100
year, month, job_id = jobNumber.to_s.match(/(\d{4})(\d{2})(\d*)/)[1..3]
首先,我们将jobNumber转换为String。然后我们抛出一个正则表达式。 regexp有三个捕获组((\d{4})
一年有四个数字,(\d{2})
一个月有两个数字,(\d*)
job_id的剩余数字。
job_number.to_s.match(...)
会返回MatchData
个对象,我们可以通过其前三个捕获组[1..3]
(see the documentation)访问该对象。
最后,我们将结果数组分配给变量year
,month
和job_id
。
year
#=> 2013
month
#=> 05
job_id
#=> 100