0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ruby】ひらがな/カタカナ変換や全角/半角変換や漢字にマッチする正規表現などなど

Last updated at Posted at 2022-09-26

目次

  1. 概要
  2. 参考文献
  3. 使用した正規表現
  4. 作ったメソッド達
  5. 破壊的メソッドにしたい時!
  6. Railsにおける便利な文字列操作のおすすめ記事

概要

日本語の表記揺れなどに対応する必要があり、Stringクラスに定義する形で色々作ったのでメモしておきます。

参考文献

使用した正規表現

/\p{Han}/ # 漢字にマッチ
/\p{Hiragana}/ # ひらがなにマッチ
/\p{Katakana}/ # カタカナにマッチ
/ー/ # 長音符にマッチ(当たり前ですがこれ忘れると「サッカー」とかにマッチしなくなるので注意)
/々/ # 「々」にマッチ(漢字に含まれないので注意)

※記事初稿時点では漢字の正規表現は /一-龥/ としていました。(ググって出てくるものもこれが多いです)
しかし、上記の表現ではカバー出来ない漢字があるとのことで、注意が必要です。
こちらはコメントで頂いた情報を元に修正しました。

以下記事が詳しいです。
https://qiita.com/scivola/items/905225bf4175392bc359

作ったメソッド達

全角半角変換

class String
    def to_half_size
        # 全角を半角に
        # 長音符はハイフンに
        self.tr('0-9a-zA-Z+ー', '0-9a-zA-Z+-')
    end

    def to_full_size
        # to_hals_sizeと逆
        self.tr('0-9a-zA-Z+-', '0-9a-zA-Z+ー')
    end
end

ひらがなカタカナ変換

class String
	def hiragana_to_katakana
		NKF.nkf('-W -w --katakana', self)
	end

	def katakana_to_hiragana
		NKF.nkf('-W -w --hiragana', self)
	end
end

※nkfのオプション(第一引数)は公式を参考にしてください。

記号の削除

class String
    def remove_symbolic_character
		# 全&半角数字/全&半角英小&大文字/ひらがな/カタカナ/漢字/ー(長音符)/スペース以外 と スペース を消す
		self.gsub(/[^0-9a-zA-Z0-9a-zA-Z々\p{Han}\p{Hiragana}\p{Katakana}ー']| | |\'/, '')
	end
end

破壊的メソッドにしたい時!

replaceメソッドでselfを置き換える事が出来るらしい。
(js使う人には文字列の置換っぽく見えるけど、self自体を置き換える)

class String
    def to_half_size
        self.tr('0-9a-zA-Z+ー', '0-9a-zA-Z+-')
    end

    def to_half_size!
        self.replace(self.to_half_size)
    end
end

Railsにおける便利な文字列操作のおすすめ記事

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?