【发布时间】:2014-10-08 19:57:24
【问题描述】:
我正在 Rails 中设置一个需要名字和姓氏的用户表单。我决定使用 Ruby doc 中倒数第三个正则表达式,以确保它们不输入任何数字或特殊字符。不幸的是,当我返回表单时出现此错误:
提供的正则表达式使用多行锚(^ 或 $), 这可能会带来安全风险。您的意思是使用 \A 和 \z,还是 忘记添加 :multiline => true 选项了?
我刚刚开始学习 RegEx,所以如果有更好的方法来编写此验证,我会全力以赴。
代码:
validates :first_name, :last_name, length: {minimum: 2}, format: {with: /^([^\d\W]|[-])*$/, message: 'First Name/Last Name cannot have any numbers or special characters'}
【问题讨论】:
-
警告非常明确。它告诉您,您在多行正则表达式上使用锚点作为行首和行尾,但没有说它将在单行上工作,其中
\A优于^和\z在单行中优于$查看。所以使用/\A([^\d\W]|[-])*\z/形式的正则表达式它会起作用,您可以在regex101.com 进行测试,它会为您解释正则表达式的锚点/部分。
标签: ruby-on-rails ruby regex forms