Help us understand the problem. What is going on with this article?

Railsの正規表現での^と$

More than 5 years have passed since last update.

Rails4での正規表現を使ってModelのVaildatesを実装するときに始めて知ったので、メモ。

郵便番号を正規表現でチェックする

エラーが出た実装

user.rb
class User < ActiveRecord::Base
  validates :zip_code, format: { with: /^\d{3}\-?\d{4}$/ }
end

これでアプリケーションを実行すると以下のエラーが出ました。

Screen Shot 2015-02-15 at 4.45.20 PM.png

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

を使え、と言われた。

修正した実装

user.rb
class User < ActiveRecord::Base
  validates :zip_code, format: { with: /\A\d{3}\-?\d{4}\z/ }
end

これでエラーは出なくなりました。

Rails4から正規表現のルールが厳しくなって、 multiline: true が設定されていない場合は ^, $ はエラーになるそうです。なるほどなるほど :smiley:


参考

kentana20
LiverpoolFCを愛するエンジニア。 株式会社一休で宿泊サイト「一休.com」の開発・運用をやってます。
http://kentana20.hatenablog.com/
ikyu
「こころに贅沢を」をコンセプトに一休.com、一休レストランなどのサービスを提供しています。
https://www.ikyu.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away