【问题标题】:Rails validates with regex is not working?Rails 使用正则表达式验证不起作用?
【发布时间】:2014-06-26 12:10:09
【问题描述】:

简单的正则表达式不起作用。例如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." }

【问题讨论】:

  • 想做什么?
  • 看到正则表达式了吗?仅限 [a-z]。但它不验证。例如a329394 不会抛出错误。
  • @ff15 试试[0-9a]+[0-9a-z]+

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


【解决方案1】:

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

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

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

另外注意不要使用^$,在ruby中,^$匹配的开始和结束,而不是字符串,所以它会在多行字符串上被打破。

【讨论】:

  • 仍然无法正常工作...手掌面对面!什么?我该如何调试呢?任何想法,因为这很奇怪。
【解决方案2】:

您的正则表达式返回匹配项。它正在寻找字符串中任何位置出现的任何字母并返回匹配项。您想指定只允许个字母。

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

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

【讨论】:

  • 您的正则表达式无效。它会导致轨道上的安全风险。 The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option?
  • 啊,以前没遇到过,谢谢。它有效但不安全。一个很好的解释:stackoverflow.com/a/17760113/836205
猜你喜欢
  • 2021-06-18
  • 2018-11-29
  • 2014-04-21
  • 1970-01-01
  • 2016-08-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多