Rubyでの半角全角の変換方法を
- カタカナのみ
- 英数字のみ
- ひらがな
- カタカナ英数字ひらがな
の4種類について紹介します。
以下で紹介するNKFを使用するためには、こちらを実行してください。
require 'nkf' => true
目次
カタカナ
- 全角→半角&半角→全角
NKF.nkf('-w -Z4', 'カタカナカタカナ') => "カタカナカタカナ"
- 全角→半角
NKF.nkf('-w -Z4 -x', 'カタカナカタカナ') => "カタカナカタカナ"
- 半角→全角
NKF.nkf('-w -X', 'カタカナカタカナ') => "カタカナカタカナ"
英数字
- 全角→半角
NKF.nkf('-w -Z4', 'ABC012') => "ABC012"
'ABC012'.tr("A-Z0-9","A-Z0-9") => "ABC012"
- 半角→全角
'ABC012'.tr("A-Z0-9","A-Z0-9") => "ABC012"
NKFでは半角英数字から全角英数字には変換はできませんでした。
ひらがな
- ひらがな→全角カタカナ
'ひらがな'.tr('あ-ん', 'ア-ン') => "ヒラガナ"
- ひらがな→半角カタカナ
NKF.nkf('-w -Z4 -x', 'ひらがな'.tr('あ-ん', 'ア-ン')) => "ヒラガナ"
trメソッドのみ使用して変換すると、求めている結果と違うものになります。
'ひらがな'.tr('あ-ん', 'ア-ン') => "ンンサル"
カタカナ英数字ひらがな混合
- 全角カタカナ英数字&ひらがな→半角カタカナ英数字
str = 'ひらがなカタカナABC012' NKF.nkf('-w -Z4 -x', str.tr('あ-ん', 'ア-ン')) => "ヒラガナカタカナABC012"
- 半角カタカナ英数字&ひらがな→全角カタカナ英数字
str = 'ひらがなカタカナABC012' NKF.nkf('-w -X', str).tr("A-Za-z0-9","A-Za-z0-9").tr('あ-ん', 'ア-ン') => "ヒラガナカタカナABC012"
補足
NKFで使用したオプションの詳細を記載しておきます。
-w
: 出力形式をUnicodeに指定。
-Z4
: 全角カタカナを半角カタカナに、半角カタカナを全角カタカナに変換し出力。英数字は半角変換だけ対応。
-X
: 半角カタカナを全角カタカナに変換し出力。
-x
: 半角カタカナを全角カタカタに変換せず出力。
また、-Z4
は全角と半角を相互に変換するため、全角を半角に変換するだけの場合は-x
を組み合わせることで実現可能です。
おわりに
カタカナ英数字ひらがな混合の文字列を変換するというのがあまりなかったのでまとめてみました。
金融系システムなどでは、名前が半角カタカナ英数字のみ対応というものが結構ありますよね。
でも半角カタカナは普段使わないので、変換するのも大変だと思い自動変換したくて。
もっといい方法あれば知りたいです。
参考文献
- [Ruby] 全角カタカナを半角カタカナに変換する – Qiita
- Rubyの文字列を全角から半角へ変換する方法【初心者向け】 | TechAcademyマガジン
- module NKF (Ruby 2.6.0)
ありがとうございます!