Rubyの文字列を全角から半角へ変換する方法【初心者向け】

初心者向けにRubyで文字列を全角から半角へ変換する方法を使う方法について解説しています。取得したデータを処理のために変換する際に必要な手法です。実際にソースコードを書いて説明しているので、ぜひ使い方を覚えておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyで文字列を全角から半角へ変換する方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

全角から半角へ変換する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

文字列を全角から半角へ変換する方法

入力フォームなどで入力された値や、CSVファイルの値などで、全角で入っている英数、カナなどを半角に変換したいケースが発生する事があります。

その場合、Rubyの標準ライブラリである、`nkf` を使用することで全角から半角への変換が行えます。

nkfとは、`Network Kanji Filter` の略で、文字列の文字コードや改行コードを変換するためのライブラリです。

文字コードや改行コード以外にも、

  • ひらがなをカタカナへ変換
  • 全角カタカナを半角カタカナへ変換

などの用途に利用できる、大変便利なライブラリです。

 

また、他の方法として、 `trメソッド` を利用し、全角から半角へ変換する方法があります。

str.tr(from_str, to_str)

trメソッドは、文字列の中で引数from_strに並べた文字を、引数to_strに並べた文字に置き換え、新しい文字列を返します。

trメソッドの引数では、正規表現の文字クラスのように、範囲指定、否定などができます。

"文字列".tr('0-9a-zA-Z','0-9a-zA-Z')
=> 全角英数字が半角英数字に変換される

"文字列".tr("あ-ん", "ア-ン")
=> ひらがながカタカナに変換される

 

実際に書いてみよう

実際に、nkfライブラリを使用した方法と、trメソッドを利用した方法で変換を行っていきます。

trメソッドを使用して英数字を全角から半角へ変換する

str = "ABCde0123"
p str.tr('0-9a-zA-Z','0-9a-zA-Z')

# 実行結果:ABCde0123

英数字のみであれば、このようにtrメソッドを使用するのが簡単ですね。

ただし、日本語が入った場合、文字コードの問題などでうまく変換できない可能性があります。

そのため、様々な文字が入ってくることが分かっている、可能性がある場合は、nkfを使用するのが良いでしょう。

 

nkfライブラリを使用して、全角から半角へ変換する

require 'nkf'

str = "アイウエオABC012"
# nkfライブラリを使用して変換を実行
p NKF.nkf('-w -Z4', str)

# 実行結果:アイウエオABC012

NKF.nkf(‘-w -Z4’, str) の、 -wZ4 はnkfのオプションです。

-w は文字コード、UTF-8として出力する、 -Z4は全角を半角に変換する、というオプションになります。

nkfライブラリには、他にも様々なオプションがあり、ひらがなをカタカナへ、などの変換も可能です。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

監修してくれたメンター

中廣 誠

職種: WEBエンジニア

過去の開発実績・業務内容:
一部上場企業にて、WEBアプリケーションの受託開発、自社WEBサービス開発、自社ゲーム開発に従事
現在はフリーで活動し、ECサイト開発/運営、課題を解決するためのシステムコンサルタントなどを実施

趣味など
フリーでの活動を期に沖縄へ移住したので、海でのスキンダイビング、釣りなどを趣味にしています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。