ホーム DoRuby 長い文字列をカットして表示するプログラム

長い文字列をカットして表示するプログラム

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

こんにちは。
KBMJでRuby on Railsを使ったWebの開発をしている本多と申します。

今回は「指定の文字数より長ければカットして表示する」というプログラムを紹介したいと思います。

Ruby のソースコードは以下です。

$KCODE=’u’ #文字コードを指定。今回はutf-8の場合
require ‘jcode’ #jlength(マルチバイトの文字列の長さを取得するメソッド)を使用するためにjcodeを読み込む

def cut_off(text, len)
  if text != nil
    if text.jlength < len
      text
    else
      text.scan(/^.{#{len}}/m)[0] + “…”
    end
  else
    ”
  end
end

puts cut_off(“任意の文字列”, 任意の文字数(整数))

上のソース内のtextとは「カットしたい文字列」、lenとは「カットしたい長さ」です。
指定の文字数よりも長い場合に正規表現を用いて先頭からlenの長さだけ文字列を抜き取り、末尾に”…”を付加したものを返します。
[0]が付いていますが、これはscanという関数が「パターンにマッチした文字列を、マッチした数だけ配列で返す」という特徴を持っているため、
text.scan(/^.{#{len}}/m) + “…”と書いてしまうと


[“マッチした文字列”] + “…”


になってしまい、配列 + 文字列という処理を行おうとしてエラーが出ます。

textの中身がlenより短い文字列の場合はそのまま返します。

この関数の最大の魅力は「日本語(マルチバイト)に対応しているという点です」
例えばcut_off(“こんにちは。KBMJの本多です。”, 10)と書くことで
「こんにちは。KBMJ…」という文字を得ることができます。


注意点としては、必ず『$KCODEの宣言』と『jcodeの読み込み』を行うようにしてください。
$KCODEが宣言されていない場合は正常な文字数で取り出せず、
jcodeが読み込まれていない場合はNoMethodErrorが出てしまいます。

ちなみに Ruby on Rails でcut_offを使用する場合はソースを書く場所がそれぞれ以下になります。

(RAILSROOT)/config/environment.rb

先頭の行に追加

$KCODE = ‘u’
require ‘jcode’
# Be sure to restart your web server when you modify this file.

# Uncomment below to force Rails into production mode when
————————-中略—————————-


(RAILSROOT)/app/helpers/application_helper.rb

# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper

  def cut_off(text, len)
    if text != nil
      if text.jlength < len
        text
      else
        text.scan(/^.{#{len}}/m)[0] + “…”
      end
    else
      ”
    end
  end

end


(RAILSROOT)/app/views/hoge/hogehoge.rhtml

<%= cut_off(“文字列”, 20) %>


これでRails上でも任意の文字数でカットできるようになりました。

例えばブログのタイトルのみを表示させるインデックスを作成する際、
長すぎるタイトルをそのまま表示するとレイアウトが崩れる原因になることがあります。
そんな時に役に立つのが、このcut_offです。
是非活用してみてください。
それでは。

GOOD RAILS!!

記事を共有

最近人気な記事