Rubyで全角カタカナを半角カタカナに変換する
なぜか半角カタカナから全角カタカナにするサンプルは良く見つかるのに
全角カタカナから半角カタカナに変換するサンプルがあまり見つからないので
自分で作ってみた。
やっつけ仕事だけど、とりあえず動くので良しとしておく。
$KCODE = 'u' class TextFilter @@zenkaku_kana = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ ゛ ゜ ー ! ).freeze @@hankaku_kana = %w(ガ ギ グ ゲ ゴ ザ ジ ズ ゼ ゾ ダ ヂ ヅ デ ド バ ビ ブ ベ ボ パ ピ プ ペ ポ ヴ ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ャ ュ ョ ァ ィ ゥ ェ ォ ッ ゙ ゚ ー ! ).freeze @@zenkaku_alnum = %w(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z).freeze @@hankaku_alnum = %w(0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z).freeze def self.zen_to_han(str) str = str.clone str = self.filter(str, @@zenkaku_alnum, @@hankaku_alnum) self.filter(str, @@zenkaku_kana, @@hankaku_kana) end private def self.filter(str, from, to) str = str.clone from.each_with_index do |int, i| str.gsub!(int, to[i]) end return str end end require 'nkf' text = "アイウエオ0123456789!" after = TextFilter.zen_to_han(text) puts NKF.nkf('-m0 -s -x', text) puts NKF.nkf('-m0 -s -x', after)
出力
アイウエオ0123456789! アイウエオ0123456789!