简单的正则表达式不起作用..例如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." }
答案 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/
,则只会匹配包含所有小写字母的字符串。