我正在 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/