Rubyで文字列の先頭や末尾にある空白文字とか全角スペースを削除する方法

Rubyで会員登録等の際に、文字列の先頭や末尾にある空白文字等を削除する方法を紹介していくよ。

Rubyで文字列の先頭や末尾の空白文字を削除したい時

Rubyで全角スペースを除く空白文字(改行とか半角スペース)を削除したい場合には、stripメソッドを使うのが良い。

公式ドキュメント「strip, strip! (String) – Rubyリファレンス」にも書かれているように、stripメソッドは、文字列の先頭や後ろの以下の空白文字を削除してくれる。

  • \n 改行
  • \r 復帰
  • \t タブ
  • 半角スペース
  • \0 NULL文字。ただし先頭のみ。

実際に、以下の通り使うことができる。

str = " hello world\n  "
sub_str = str.strip
puts str
puts sub_str

結果は以下の通りになる。

 hello world
hello world

また、破壊的メソッドとしてstrip!も用意されており、レシーバも変更してくれる。(レシーバとは、上の例で言う所のstr変数のこと)

Rubyで全角スペースも削除したい時の方法

上記の例では、stripは一般的な空白文字のみを対象に文字列をいじってくれたが、我々日本人としては全角スペースも対象にして欲しい所。

しかし、2019年3月時点でのRubyでは全角スペースも対象にするメソッドが用意されていないので、自分で作るしかない。(もし、便利なメソッドがあれば教えてください)

そこでStringクラスにtrimメソッドを追加してあげて、そのtrimメソッドを使う方法を取ると良い。

class String
def trim
gsub(/(^[ |\s|]+) | ($[ |\s|]+)/, "")
end
end
str = " hello world\n "
sub_str = str.trim
puts str
puts sub_str

以下は、上記のtrimメソッドの中身の解説をしていく。

最初にgsubメソッドを使っているが、これは第一引数で指定した正規表現等に該当した部分を、第2引数に指定した表現に直す、と言うメソッド。

上記の例では、文字列の先頭又は末尾にある全角スペースを含む空白文字を、何もない状態''に変更している。また、正規表現では^は先頭、$は末尾を表し、\sは空白文字(\n \t \r \0)を表す。

全角スペースの表現の全角スペースを入力して表現しているが、欲を言えば、文字コードで表現できるようにしたい。(後で修正します)

ReratedPosts

RubyでGUIアプリ(デスクトップアプリ)を作るための環境構築
Rubyではインスタンス変数を直接使うよりattr_readerを使うべき2つの理由
RubyやRailsをプロジェクト毎に入れて管理する方法
Rails5で作ったアプリをHerokuでデプロイする手順