【问题标题】:Regex breaking my model: Regex is using multiline anchors (^ or $)正则表达式打破了我的模型:正则表达式正在使用多行锚(^ 或 $)
【发布时间】:2015-09-10 03:36:21
【问题描述】:

我正在更新我的Users 模型中的正则表达式,这似乎已经破坏了它。每当我尝试对 Users 模型执行任何操作时,都会收到以下错误消息:

提供的正则表达式使用多行锚(^$), 这可能会带来安全风险。您的意思是使用\A\z,还是 忘记添加:multiline => true 选项?

问题出现在电子邮件验证下。我的User 模型看起来像:

require 'digest'
class User < ActiveRecord::Base
  validates :email, :format => { :with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i }, ...
  ...
end

【问题讨论】:

  • 所以将/^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i 替换为/\A[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}\z/i 。您需要验证整个字符串,对吗?

标签: ruby-on-rails ruby regex


【解决方案1】:

在 RoR 中,您需要明确告诉引擎边界,^$ 带有 :multiline =&gt; true 选项来匹配行或使用 \A\z 来匹配整个字符串。

所以,替换

/^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i

/\A[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}\z/i

这允许明确的验证并减少人为错误。

【讨论】:

  • 成功了,非常感谢。我知道这是一个重复的问题,但在其他答案中替换对我来说并不奏效。我的应用程序再次运行,我正在继续阅读这本书。你是我的救星!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多