たとえばモデル名がTopic、カラム名がbodyだとして
class Topic < ActiveRecord::Baseとする。(文字コードはUTF-8)
validates_length_of :body, :within => 0..30
end
フォームに全角数字で
012345678901234567890123456789
とするとバリデーションは通る。しかし今度は改行を含めて
0123456789
0123456789
0123456789
とすると、これはエラーになる。0123456789
0123456789
文字数を調べると
p @topic.body.split(//).size #=>34
となり、改行をそれぞれ2文字としてカウントしている事が分かる。
試しに半角数字で
0123456789
0123456789
0123456789
と入力しても0123456789
0123456789
p @topic.body.split(//).size #=>34
となる。
改行コードは同じOSであっても、ブラウザによってCRだったりLFだったりCRLFだったりするのだが、Mac Safari,Firefox Windows IE,Firefoxの4つで試した結果は同じだったので、どうやらRailsは改行は2文字としてカウントしているようだ。
タグ:Rails