Rails验证与正则表达式不起作用?

时间:2014-06-26 03:43:46

标签: ruby-on-rails regex ruby-on-rails-4

简单的正则表达式不起作用..例如first_name = "a11"工作正常。为什么我的格式正则表达式无法正确验证?

  validates :first_name, presence: { message:  "Name cannot be blank." },
                         format: { with: /[a-z]/i, message:  "Name must only contain letters." },
                         length: { minimum: 2, message:  "Name must be at least 2 letters." }

2 个答案:

答案 0 :(得分:5)

因为它与你的正则表达式匹配。

您必须指定字符串的开头和结尾,并添加*或者只匹配一个字符。

format: { with: /\A[a-z]*\z/i, message:  "Name must only contain letters." },

另请注意,请勿使用^$,在红宝石中,^$匹配行的开头和结尾 ,而不是字符串,所以它会在多行字符串上被打破。

答案 1 :(得分:1)

你的正则表达式返回一个匹配。它正在查找字符串中任何位置的任何字母并返回该匹配项。您想指定仅允许 字母。

更新原始回答不安全:https://stackoverflow.com/a/17760113/836205

如果您将其更改为 /^[a-z]*$/ /\A[a-z]*\z/,则只会匹配包含所有小写字母的字符串。