检查字符串是否包含数字

时间:2019-03-08 04:29:46

标签: ruby-on-rails ruby string validation

我的输入值如下:

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"

2 个答案:

答案 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+\.)(.*)中有三个不同的组。

  1. 匹配任何内容
  2. 匹配.<number>.
  3. 匹配任何内容

因此,基于此正则表达式,第二组应该为您提供.<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

person.rb

class Person < ApplicationRecord
  validates :personname, format: { with: /\.\d+\./, message: 'must include digits' }
end

您可以使用正则表达式@ rubular