ruby-on-rails - 在 Rails 3 中,如何验证字符串只匹配几个字符串

标签 ruby-on-rails ruby regex string

我正在 Rails 3 中创建一个模型,如下所示:

class Foo < ActiveRecord::Base
  attr_accessible :bar

  type_regex = /(dog)|(cat)|(bird)/

  validates :bar,  :presence => true,
                   :format => { :with => type_regex }
end

我需要类型与狗、猫或鸟完全匹配。然而,在上面的类中,type_regex 将匹配 doggy、cathrine 等。

如何使验证与这些字符串完全匹配?

谢谢

最佳答案

您需要向正则表达式添加 anchor 。具体来说,您需要将 \A 添加到正则表达式的开头并将 \Z 添加到正则表达式的末尾(\A\Z 分别表示字符串的开头和结尾)。

但要注意优先级:由于 | 的优先级较低,您要么必须在交替周围放置一个非捕获组,要么单独锚定每个单词。 IE。你必须做 /\A(?:(dog)|(cat)|(bird))\Z/。执行 /\A(dog)|(cat)|(bird)\Z/ 将不起作用,因为这样 \A 将仅适用于 dog\Z 仅适用于 bird

如果您使用 ^$ 而不是 \A\Z,情况也是如此。关于这个主题,让我解释一下它们之间的区别:^$ 匹配行的开头和结尾,而不是字符串。所以字符串“dog\ngy”仍然会匹配正则表达式 /^dog$/,但不会匹配正则表达式 /\Adog\Z/

关于ruby-on-rails - 在 Rails 3 中,如何验证字符串只匹配几个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951559/

相关文章:

ruby-on-rails - 在 ActiveMerchant 中测试 Paypal Express

ruby - ruby 中的 Datetime.civil 和 Datetime.new 有区别吗?

ruby-on-rails - Unicorn.rb 配置取决于环境

javascript - 仅匹配不在 &lt;script&gt; 或 <a> 标签中的字符串

ruby-on-rails - Stripe API 无效请求 : Must provide source or customer

ruby-on-rails - Rails 服务器启动后退出

ruby - Rails 使用 OR 查询 WHERE 子句

regex - perl中正则表达式中的OR条件

ruby - 如何在非传统空格上分割字符串?

ruby-on-rails - :method => 'delete' in link_to doesn't seem to work in Rails 3?