Railsでtrimするたった一つの冴えたやり方

trimしたいという欲求はアプリケーションを作る上で必ず出てくる。

そしてすぐにString#stripではダメだと気付く。全角スペースが削除されないからだ。 で、独自の正規表現を書いたりするんだけど、ActiveSupport内に便利な定数があるのでそれを使うと楽。

str.gsub(ActiveSupport::Multibyte::Unicode::LEADERS_PAT, '').gsub(ActiveSupport::Multibyte::Unicode::TRAILERS_PAT, '')

LEADERS_PATとか、TRAILERS_PATって何?って思った人は、 http://api.rubyonrails.org/classes/ActiveSupport/Multibyte/Unicode.html をみるか、ソースを見るといい。

要は、以下の文字がtrimされる。

      # All the unicode whitespace
      WHITESPACE = [
        (0x0009..0x000D).to_a, # White_Space # Cc   [5] <control-0009>..<control-000D>
        0x0020,                # White_Space # Zs       SPACE
        0x0085,                # White_Space # Cc       <control-0085>
        0x00A0,                # White_Space # Zs       NO-BREAK SPACE
        0x1680,                # White_Space # Zs       OGHAM SPACE MARK
        (0x2000..0x200A).to_a, # White_Space # Zs  [11] EN QUAD..HAIR SPACE
        0x2028,                # White_Space # Zl       LINE SEPARATOR
        0x2029,                # White_Space # Zp       PARAGRAPH SEPARATOR
        0x202F,                # White_Space # Zs       NARROW NO-BREAK SPACE
        0x205F,                # White_Space # Zs       MEDIUM MATHEMATICAL SPACE
        0x3000,                # White_Space # Zs       IDEOGRAPHIC SPACE
      ].flatten.freeze