Rails3 でsimple_formを使っていると
simple_form がJavaScript で入力値の検証をしてくれるのですが
validates_format_of のwithパラメータに記述した正規表現によっては、
正しい値を入力しているにも関わらずsubmitできないという現象が起こります。
サンプル事例
例えば、model側で
/\A[a-zA-Z]\z/ というformatを指定した場合
validates :name, format: {with: /\A[a-zA-Z]+\z/}
JavaScriptでも同じ正規表現でチェックを実行しますが、JavaScriptの正規表現では
\A \z が文字列の先頭、末尾として解釈されない為
アルファベットだけを入力していても、submitできなくなります。
この場合 withパラメータで設定する正規表現をJavaScriptでも解釈されるものに変更すれば
submitできないという問題は解決しますが、場合によっては不正な値を許容してしまう可能性があるので
novalidate をtrue にしてJavaScriptによるチェック自体をOFFにしてしまった方が安全かもしれません。
<%= simple_form_for(@user, html: {novalidate: true}) do |f| %>
今回の例のように
\z を $ に変更した場合、改行文字が含まれる文字列は改行文字以降に意図したチェックがかからなくなるため危険です。
http://stackoverflow.com/questions/577653/difference-between-a-z-and-in-ruby-regular-expressions
Rails4
Rails4に対応した3.0.0 以降はvalidates_format_of によるチェックはskipするようになったため
Rails4でsimple_formを使う場合はこのような問題は起こりません。