我的输入值如下:
string = "devid"
string = "devid123"
string = "devid.123.devid"
我需要对包含.(number).
的字符串进行排序,例如"devid.123.devid"
。如何只分隔像.(numbers).
这样的由.123.
组成的字符串?帮我找到解决方法。
在控制器中,我有:
@person = Person.new
personname = params['personname']
if personname.match("/\d+/")
@person.person_name = personname
@person.save()
result = 'true'
end
执行此代码时,我得到"devid123"
和"devid.123.devid"
。
答案 0 :(得分:2)
如果确定有效的人名的格式始终为
<string>.<number>.<string>
您可以尝试将:[regex, index]
方法用于ruby中的字符串。
https://ruby-doc.org/core-2.6.1/String.html#method-i-5B-5D
如果
personname = "devid.123.devid"
s[/(.*)(\.\d+\.)(.*)/, 2] = ".123."
正则表达式(.*)(\.\d+\.)(.*)
中有三个不同的组。
.<number>.
因此,基于此正则表达式,第二组应该为您提供.<number>.
,我希望这是您所需要的。
通过Ruby 2.4.1测试
答案 1 :(得分:2)
如果我正确理解这一点,则只需要在数字前加上.
的字符串。如果是这样,您需要将正则表达式修改为/\.\d+/
@person = Person.new
personname=params['personname']
if personname.match("/\.\d+/")
@person.person_name = personname
@person.save
result = 'true'
end
但这听起来像是您应该在模型中处理的逻辑,因为这被标记为导轨而不是普通的旧红宝石
class PersonController
def create
if @person = Person.create(params)
result = 'true'
else
result = 'false'
end
# whatever you doing with result
end
end
class Person < ApplicationRecord
validates :personname, format: { with: /\.\d+\./, message: 'must include digits' }
end
您可以使用正则表达式@ rubular