Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何仅允许/验证以特定字符开头的字符串?_Ruby On Rails_Ruby_Validation - Fatal编程技术网

Ruby on rails 如何仅允许/验证以特定字符开头的字符串?

Ruby on rails 如何仅允许/验证以特定字符开头的字符串?,ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,我正在试图弄清楚如何在加拿大邮政编码存储到rails数据库之前验证它们。但我不想在验证中使用正则表达式。我想存储一个现有的邮政编码,从某些字符开始,然后不管后面是什么,只要初始字符与我设置的字符匹配 例如,如果有人输入V7C2X2、V7C1X1或V7B1X1,它应该接受它,因为它以字符V7C或V7B开头。它应该拒绝任何不以V7C或V7B开头的条目 我现在有这个: class Postal < ApplicationRecord validates_inclusion_of :posta

我正在试图弄清楚如何在加拿大邮政编码存储到rails数据库之前验证它们。但我不想在验证中使用正则表达式。我想存储一个现有的邮政编码,从某些字符开始,然后不管后面是什么,只要初始字符与我设置的字符匹配

例如,如果有人输入V7C2X2、V7C1X1或V7B1X1,它应该接受它,因为它以字符V7C或V7B开头。它应该拒绝任何不以V7C或V7B开头的条目

我现在有这个:

class Postal < ApplicationRecord
  validates_inclusion_of :postalcode, :in => ["V7C", "V7B"]
end

您可以使用自定义验证器

class Postal < ApplicationRecord
  validate :code_includes

  private

  def code_includes
    ["V7C","V7B"].include? postalcode
  end
end
这将检查postalcode是否将这两个字符串中的任意一个作为子字符串

要检查postalcode是否从这两个选项中的一个开始,您可以执行以下操作

class Postal < ApplicationRecord
  validate :code_starts_with

  private

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

签出验证的格式。您可以执行以下操作:

validates_format_of :postalcode, with: /^(V7B|V7C)/
也不需要:/**/