Railsで全角・改行を含む文字数をカウントする

Railsのモデルでvalidates_length_ofを使って文字数制限をしているときに、全角文字(日本語)、改行を含めた文字数のカウントの仕方について調べてみた。
たとえばモデル名がTopic、カラム名がbodyだとして
class Topic < ActiveRecord::Base
validates_length_of :body, :within => 0..30
end
とする。(文字コードはUTF-8)

フォームに全角数字で
012345678901234567890123456789
とするとバリデーションは通る。

しかし今度は改行を含めて
0123456789
0123456789
0123456789
とすると、これはエラーになる。

文字数を調べると
p @topic.body.split(//).size #=>34
となり、改行をそれぞれ2文字としてカウントしている事が分かる。

試しに半角数字で
0123456789
0123456789
0123456789
と入力しても
p @topic.body.split(//).size #=>34
となる。

改行コードは同じOSであっても、ブラウザによってCRだったりLFだったりCRLFだったりするのだが、Mac Safari,Firefox Windows IE,Firefoxの4つで試した結果は同じだったので、どうやらRailsは改行は2文字としてカウントしているようだ。


タグ:Rails
posted by digital-squad at 2009年01月15日 14時22分 | Comment(0) | TrackBack(0) | Ruby on Rails / Ruby
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。