2013年12月21日土曜日

Rails4で「The provided regular expression is using multiline anchors (^ or $), 」エラー

Rails4を使って「RailsによるアジャイルWebアプリケーション開発」を写経していたら、
7章のバリデーションの実装のところで下のエラーが発生した。

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?

これは、正規表現で「^」や「$」を使って精査していると複数行とのマッチで精査が完全じゃないよってことで発生するエラーのようです。
マルチラインでも先頭、末尾を判定できる「¥A」、「¥z」を使うと解決します。

変更前

validates :image_url, allow_blank: true, format: {
      with: %r{\.(gif|jpg|png)$}i,
      message: 'はGIF、JPG、PNG画像のURLでなければなりません'
  }

変更後

validates :image_url, allow_blank: true, format: {
      with: %r{\.(gif|jpg|png)\z}i,
      message: 'はGIF、JPG、PNG画像のURLでなければなりません'
  }

stackoverflowに全く同じ本で困っている人がいて、何が問題なのか分かりやすく書かれてる。
http://stackoverflow.com/questions/17759735/regular-expressions-with-validating-in-ror-4