Edited at

Railsの正規表現での^と$

More than 3 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:



参考