Rails4での正規表現を使ってModelのVaildatesを実装するときに始めて知ったので、メモ。
例
郵便番号を正規表現でチェックする
エラーが出た実装
user.rb
class User < ActiveRecord::Base
validates :zip_code, format: { with: /^\d{3}\-?\d{4}$/ }
end
これでアプリケーションを実行すると以下のエラーが出ました。
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
が設定されていない場合は ^
, $
はエラーになるそうです。なるほどなるほど