0

我使用 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]

但在那之后有自定义长度字符串。如何获取单个数组中的所有数据?

4

2 回答 2

3

您可以简单地使用范围:

c = "2013121003"
[c[0..3], c[4..5], c[6..-1]]

您还可以使用String#unpack

"20131210034".unpack("A4A2A*")

或使用 tessi 建议的正则表达式,使用String#scan

c = "2013121003"
c.scan(/(\d{4})(\d{2})(\d+)/)

在所有情况下,这将返回一个包含年、月和作业 ID 作为字符串的数组。

于 2013-05-11T09:57:10.870 回答
1

一个正则表达式可以帮助你。

jobNumber = 201305100
year, month, job_id = jobNumber.to_s.match(/(\d{4})(\d{2})(\d*)/)[1..3]

首先,我们将 jobNumber 转换为 String。然后我们向它抛出一个正则表达式。正则表达式有三个捕获组((\d{4})四个数字代表年份,(\d{2})两个数字代表月份,(\d*)剩余的任何数字代表 job_id)。

job_number.to_s.match(...)返回一个MatchData对象,我们可以通过它的前三个捕获组访问它([1..3]参见文档)。

最后,我们将生成的 Array 分配给我们的变量yearmonthjob_id

year
#=> 2013
month
#=> 05
job_id
 #=> 100
于 2013-05-11T09:52:13.093 回答