Edited at

[Ruby] String#gsub で半角カタカナを全角カタカナに変換する


方法


コード

'タピオカ'.gsub(/[\uFF61-\uFF9F]+/) { |str| str.unicode_normalize(:nfkc) }

#=> "タピオカ"


説明



  • 'タピオカ'.unicode_normalize と書かずに gsub を介しているのは、Unicode 正規化を適用する文字列を限定し、想定外の置換が起きないようにするため。

  • 半角カタカナの Unicode コードポイントについては、@scivola さんのコメント、および Wikipedia の 半角カナ ≫ Unicode (UTF-8, UTF-16 など) を参考にした。


旧方法

@scivola さんにコメントをいただく前に紹介したいた方法。半角カタカナ以外も Unicode 正規化してしまうため改善が必要だった。


コード

'カンダタ'.gsub(/\p{In_Halfwidth_and_Fullwidth_Forms}+/) { |str| str.unicode_normalize(:nfkd) }

#=> "カンダタ"


説明


  • Ruby の正規表現では \p{} で Unicode プロパティを指定できる。




関連


参考

Unicode 正規化について復習するのに以下のページが役立った。





  1. Onigmo は Ruby (2.0 以降) で採用されている正規表現エンジン。