如何仅允许/验证以某些字符开头的字符串?

问题描述 投票:0回答:2

我正在尝试弄清楚如何在将加拿大邮政编码存储到Rails数据库中之前对其进行验证。但是我不想在验证中使用正则表达式来做。我想存储一个以某些字符开头的现有邮政编码,然后不关心后面的内容,只要初始字符与我设置的字符匹配即可。

例如,如果有人输入V7C2X2V7C1X1V7B1X1,它应该接受,因为它以字符V7CV7B开头。它应该拒绝任何不以V7CV7B开头的条目。

我现在有这个:

class Postal < ApplicationRecord
  validates_inclusion_of :postalcode, :in => ["V7C", "V7B"]
end
ruby-on-rails ruby validation
2个回答
0
投票

您可以使用自定义验证器。

class Postal < ApplicationRecord
  validate :code_includes

  private

  def code_includes
    ["V7C","V7B"].include? postalcode
  end
end

这只会检查邮政编码是否在任何地方都有这两个字符串中的一个作为子字符串。

要检查邮政编码以您可以选择的两个开头之一

class Postal < ApplicationRecord
  validate :code_starts_with

  private

  def code_starts_with
    postalcode.start_with?("V7C","V7B")
  end
end

0
投票

签出validates_format_of。您可以执行以下操作:

validates_format_of :postalcode, with: /^(V7B|V7C)/

也可以不带:/ ** /

© www.soinside.com 2019 - 2024. All rights reserved.